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 に答える