c#请解释为什么这样做,

时间:2015-08-28 11:53:42

标签: c#

我不明白这个程序是如何工作的,如果原始总和设置为0,那么r(remainder)会被添加到0之和。这两位数的正确总和怎么样?我觉得它应该像这样...... sum = num + r;

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 个答案:

答案 0 :(得分: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。

请注意,您可以通过在代码中添加一些诊断线来自己生成该表...或者您可以通过调试代码来查看它是如何工作的,并且可以在笔和纸上生成它#34; live"。

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

答案 1 :(得分:3)

即。 num = 123

  1. num!= 0为真,然后输入while
    • r = num%10 = 123%10 = 3
    • num = num / 10 = 123/10 = 12
    • sum = sum + r = 0 + 3 = 3
  2. num!= 0为真,然后输入while
    • r = num%10 = 12%10 = 2
    • num = num / 10 = 12/10 = 1
    • sum = sum + r = 3 + 2 = 5
  3. num!= 0为真,然后输入while
    • r = num%10 = 1%10 = 1
    • num = num / 10 = 1/10 = 0
    • sum = sum + r = 5 + 1 = 6
  4. num!= 0为false,然后跳过while

答案 2 :(得分:1)

在循环中,数字从右边一次递减一位数。

步骤如下:

  

r = num%10

百分比符号是模数,正如您所知,这是将第一个数字除以第二个数字的余数,在模数10的情况下,这等于最后一个数字。

  

num = num / 10

这是一个简单的除法,因为我们处理一个整数(即没有小数位)并且我们除以10,那么我们将丢失最后一位数。

  

sum = sum + r

这会将剩余金额加到我们的总数中。

假设我们从数字num = 987开始,那么迭代就像这样工作:

  

num = 987,r = 987%10 = 7,num = 987/10 = 98,sum = 0 + 7 = 7

     

num = 98,r = 98%10 = 8,num = 98/10 = 9,sum = 7 + 8 = 15

     

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

所以总和最终相当于0 + 7 + 8 + 9 = 24。

如果将求和行更改为sum = num + r,则迭代次数为:

  

sum = 98 + 7 = 105

     

sum = 9 + 8 = 17

     

sum = 0 + 9 = 9

显然这不是你想要的。