1

书中的示例要求用户输入任何正数。然后程序将分别添加各个数字并打印总数。例如,如果用户输入数字 7512,则程序设计为将 7 + 5 + 1 + 2 相加,然后打印总数。

我已经写出了我理解代码如何工作的方式。它是否正确?我对这个循环的理解是否正确,或者我错过了任何计算?当 7 % 10 中没有余数时,在第 4 次循环中会发生什么?

1st  run of loop ... sum = sum + 7512 % 10 which is equal to 2 
                        n = 7512 / 10 which which equals to 751 

2nd run of loop ... sum = 2 + 751 % 10 which is equal to 1 
                         n = 751 / 10  which is equal to 75 

3rd run of loop ...  sum = 3 + 75 % 10 which is equal to 5 
                          n  = 75 / 10 which is equal to 7

4th run of loop ...  sum = 8 + 7 % 10   <------? 

import acm.program.*; 

   public class DigitSum extends ConsoleProgram{

   public void run() {
   println("This program will add the integers in the number you enter.");
   int n = readInt("Enter a positive integer: ");
   int sum = 0;
   while (n > 0) {
        sum += n % 10;
        n /= 10; 
    }
    println("The sum of the digits is" + sum + ".");    
  }
}
4

4 回答 4

6

运算的结果7 % 10是 7,即 7 除以 10 的余数。循环的最后一次迭代是在前一个值上加 7。循环内的下一个除法步骤 ( n /= 10;) 将 n 设为 0,这就是循环的结束。

于 2012-10-19T13:30:58.490 回答
1

%不一样/

运算符用于取模,而%不是除法...这意味着运算的结果不是除法,而是获得除法的余数,例如:

7512 % 10 => 2  
751 % 10 => 1  
75 % 10 => 5  
7 % 10 => 7  

在处理数字运算时,这种逻辑相当频繁地使用。

于 2012-10-19T13:30:17.743 回答
0
  • 运行前,总和 = 0,n = 7512
  • 第一次循环... sum = 0 + 2 => sum = 2, n = 751
  • 第二次循环... sum = 2 + 1 => sum = 3, n = 75
  • 第三次循环... sum = 3 + 5 => sum = 8, n = 7
  • 第 4 次循环运行 ... sum = 8 + 7 => sum = 15, n = 0
于 2012-10-19T13:33:13.140 回答
0

7%10你得到它之后7,它就会被添加到你的结果中。并且7/10会导致0你的循环结束,你的总和现在有了你想要的加法。

于 2012-10-19T13:33:36.257 回答