2015-08-28 48 views
-5

我不明白这个程序是如何工作的,如果原始和设置为0,然后r(remainder)被加到总和0。这两位数字的正确和是多少?我觉得这应该是这样的... sum = num + r;c#请解释它为什么有效,

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Application 
{ 
    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      int num, sum = 0, r; 
      Console.WriteLine("Enter a Number : "); 
      num = int.Parse(Console.ReadLine()); 
      while (num != 0) 
      { 
       r = num % 10; 
       num = num/10; 
       **sum = sum + r;** 
      } 
      Console.WriteLine("Sum of Digits of the Number : "+sum); 
      Console.ReadLine(); 
     } 
    } 
} 
+3

'r'从号码中取出数字。并将其添加到总和中。混乱在哪里? –

+2

欢迎来到[SO],请阅读[FAQ]和[问]。祝你好运! –

回答

3

num =

  1. num!= 0为真,则进入while
    • r = num%10 = 123%10 = ,
    • num = num/10 = 123/10 = ,
    • sum = sum + r = 0 + 3 =
  2. num!= 0为真,则进入while
    • r = num%10 = 12%10 = ,
    • num = num/10 =一十分之一十二= ,
    • sumsum = + r = 3 + 2 = 5
  3. num!= 0为真,则进入while
    • r = num%10 = 1%10 = ,
    • num = num/10 = 1/10 = ,
    • sum = sum + r = 5 + 1 = 6
  4. num!= 0为假,则跳过while
8

不要忘记,这是一个循环。 sum在第一次迭代中为0,但在第二次迭代中它包含最后一位数字的值。

所以想象你有若干195692.这将经过7次迭代:

num  sum (before) r sum (after) 
195692  0   2  2 
19569  2   9  11 
    1956 11   6  17 
    195 17   5  22 
    19 22   9  31 
    1 31   1  32 

所以结果是32,其是1 + 9 + 5 + 6 + 9 + 2

请注意,您可以通过在代码中添加一些诊断行来自行生成该表格,或者您可以通过在代码中进行调试以查看其“实时”工作方式,在笔和纸上生成该表格。

如果您有sum = r + num,那么会将最后一位数字添加到数字除以10的结果中,并完全忽略先前的总和。

+0

再加上一个,带有逆转的预感...... –

+0

再加上一个为我的偶像:) –

1

在循环中,通过一个数字的数目递减在从右侧的时间。

的步骤是:

R = NUM​​%10

百分比符号是模量,其中,你会意识到,这是由第二除以第一数量的剩余部分数字,在模数为10的情况下,这等于最后一位数字。

NUM = NUM​​/10

这是一个简单的除法,因为我们正在处理一个整数(即没有小数位),我们通过10分,那么我们就失去了最后一位。

总和=总和+ R

这增加了剩余到我们的总的量。

假设我们先从数目NUM = 987,则迭代将工作像这样:

NUM = 987,R = 987%10 = 7,NUM =一十分之九百八十七= 98,总和= 0 + 7 = 7

NUM = 98,R = 98%10 = 8,NUM =一十分之九十八= 9,和= 7 + 8 = 15

NUM = 9,R = 9%10 = 9,num = 9/10 = 0,sum = 15 + 9 = 24

So su米最终被0 + 7 + 8 + 9 = 24。

等效如果改变了求和线总结= NUM​​ + R,迭代将是:

总和= 98 + 7 = 105

总和= 9 + 8 = 17

总和= 0 + 9 = 9

显然,这不是你是什么之后。