最快的方法来对数字中的数字求和

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)

这意味着迭代次数减少,但每次迭代都有一个增加的数组访问权限......