[英]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.你能告訴我我做錯了什么,可能還有如何修復它? 非常感謝。
基本上,該算法包括三個步驟:
獲取該數字的最右邊數字。 由於數字中的每個數字都有一個單位的等級,數十,數百,數千等基於其位置,最右邊的數字是將數字除以10 的余數:
digit = n % 10
數字總和:
sum += digit
將數字除以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.