【发布时间】:2021-08-27 01:39:23
【问题描述】:
假设 n 是 BigInteger,我想要它的前 5 位数字。我在考虑两种方式:
- 将
n除以 10 log10(n)-5 次(因此只保留前 5 位数字)。 - 获取
n的字符串Substring(0, 5)。
我不知道哪个更快,或者是否有其他选择可能比这些更好。
我想在测试这些选项之前听听有关它的考虑(您如何看待它们,是否有更好的选择等)。
【问题讨论】:
-
第一个除法/模数选项应该优于字符串选项,因为创建字符串(和获取子字符串)的成本往往很高。
-
this answer 使用字符串和 log10 进行测试,发现字符串解决方案要慢 3 倍(尽管他们尝试做 2 件不同的事情)
-
@Hayden,在您发送的链接中,您能理解 Russ 的回答吗?我看不出他如何评估 BigInteger 的位数(他的答案似乎是最快的),因为他的函数接收一个整数。
-
Russ 的答案接收到一个整数作为数字的 number,计算的 BigInteger 是从那里创建的。您可以跳过它并从参数中获取 BigInteger。
-
BigInteger.TryFormat(Span ...将避免字符串分配。
标签: c# algorithm optimization biginteger