我不明白这个程序是如何工作的,如果原始总和设置为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();
}
}
}
答案 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
num
!= 0为真,然后输入while
r
= num
%10 = 123%10 = 3 ,num
= num
/ 10 = 123/10 = 12 ,sum
= sum
+ r
= 0 + 3 = 3 num
!= 0为真,然后输入while
r
= num
%10 = 12%10 = 2 ,num
= num
/ 10 = 12/10 = 1 ,sum
= sum
+ r
= 3 + 2 = 5 num
!= 0为真,然后输入while
r
= num
%10 = 1%10 = 1 ,num
= num
/ 10 = 1/10 = 0 ,sum
= sum
+ r
= 5 + 1 = 6 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
显然这不是你想要的。