Con*_*oob 3 c# math sum digits
给定一个很大的数字,例如9223372036854775807(Int64.MaxValue),求数的最快方法是什么?
目前我正在将每个char解析并重新分析为int:
num.ToString().Sum(c => int.Parse(new String(new char[] { c })));
Run Code Online (Sandbox Code Playgroud)
这肯定是非常无懈可击的.有什么建议?
最后,你将如何使用它BigInteger?
谢谢
Jon*_*eet 14
那么,另一种选择是:
int sum = 0;
while (value != 0)
{
int remainder;
value = Math.DivRem(value, 10, out remainder);
sum += remainder;
}
Run Code Online (Sandbox Code Playgroud)
BigInteger也有一个DivRem方法,所以你可以使用相同的方法.
请注意,我已经看到DivRem没有像"手动"那样快速地执行相同的算术,所以如果你真的对速度感兴趣,你可能想要考虑一下.
还要考虑一个查找表,其中包含(例如)预先计算了总和的1000个元素:
int sum = 0;
while (value != 0)
{
int remainder;
value = Math.DivRem(value, 1000, out remainder);
sum += lookupTable[remainder];
}
Run Code Online (Sandbox Code Playgroud)
这意味着迭代次数减少,但每次迭代都有一个增加的数组访问权限......
| 归档时间: |
|
| 查看次数: |
11966 次 |
| 最近记录: |