簡體   English   中英

如何迭代地計算一個數字的總和 - java / bluej

[英]How to calculate the sum of digits in a number iteratively - java/bluej

我正在創建兩個方法 - 一個以遞歸方式計算數字中的數字之和,另一個以迭代方式計算。

我已經創建了遞歸方法,並且在很大程度上我理解了找到數字之和的概念,但我不確定如何正確地將它放入迭代方法中。 我的代碼沒有給我正確的輸出。

  public static int iterativeDigitSum(long n) {
        if(n < 0){ 
           String err = "n must be positive. n = " + n;
         throw new IllegalArgumentException(err);
       }
     if(n == 0){
           return 0;
       }

        long sum = 0;
        long i = 0;
     while(n > 0){
             i = n % 10;
             sum = sum + n;
             n = n / 10;
       }
       int inSum = (int)sum;
       return inSum;
}

數字“n”是10,意味着預期的輸出是1.我得到11.你能告訴我我做錯了什么,可能還有如何修復它? 非常感謝。

基本上,該算法包括三個步驟:

  1. 獲取該數字的最右邊數字。 由於數字中的每個數字都有一個單位的等級,數十,數百,數千等基於其位置,最右邊的數字是數字除以10 的余數:

    digit = n % 10

  2. 數字總和:

    sum += digit

  3. 將數字除以10,將所有數字向右移動一位。數字變小10倍:

    n = n / 10

    實際上,這將“提供”步驟1的下一個最右邊的數字。

重復上述三個步驟,直到數值變為零。

您可以通過在代碼中添加一些“調試”信息來幫助自己查看上述說明:

public static int iterativeDigitSum(long n)
{
    long sum = 0;
    int i = 1;
    System.out.println("i\tn\tdigit\tsum");        
    while(n > 0) {
        long digit = n % 10;
        sum += digit;            
        System.out.println(i + "\t" + n + "\t" + digit + "\t" + sum);
        n = n / 10;
        i++;
    }
    System.out.println("\t" + n + "\t\t" + sum);
    return (int)sum;
}

請注意, i變量用於計算循環迭代,而digit變量保存每次迭代中最右邊的數字。

給定數字10,BlueJ控制台的輸出是:

i   n     digit   sum
1   10    0       0
2   1     1       1
    0             1

而對於2019年:

i   n       digit   sum
1   2019    9       9
2   201     1       10
3   20      0       10
4   2       2       12
    0               12

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM