C#中的数字总和

Xn0*_*v3r 36 c# algorithm sum-of-digits

什么是计算数字总和的最快和最容易阅读的实现?

即给出数字:17463 = 1 + 7 + 4 + 6 + 3 = 21

Gre*_*ill 95

您可以在不使用字符串的情况下进行算术运算:

sum = 0;
while (n != 0) {
    sum += n % 10;
    n /= 10;
}
Run Code Online (Sandbox Code Playgroud)

  • @monoxide,while 循环更简洁。您不需要索引或严格控制循环迭代。 (2认同)

Cha*_*pol 40

我用

int result = 17463.ToString().Sum(c => c - '0');
Run Code Online (Sandbox Code Playgroud)

它只使用1行代码.

  • 您不必先将其转换为数组. (8认同)
  • 你能解释一下这是如何工作的吗?我不明白`-'0'` (3认同)
  • 将整数转换为字符串以便对其值求和并不是非常有效.我也不认为这段代码特别易读.虽然我没有投票. (2认同)

Ant*_*nts 16

对于整数,Greg Hewgill有大部分答案,但忘记考虑n <0.-1234的数字之和应该仍然是10,而不是-10.

n = Math.Abs(n);
sum = 0;
while (n != 0) {
    sum += n % 10;
    n /= 10;
}
Run Code Online (Sandbox Code Playgroud)

它是一个浮点数,应该采用不同的方法,并且当它达到小数点时,chaowman的解决方案将完全失败.


Muh*_*han 11

int num = 12346;
int sum = 0;
for (int n = num; n > 0; sum += n % 10, n /= 10) ;
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 10

 public static int SumDigits(int value)
 {
     int sum = 0;
     while (value != 0)
     {
         int rem;
         value = Math.DivRem(value, 10, out rem);
         sum += rem;
     }
     return sum;
 }
Run Code Online (Sandbox Code Playgroud)