我正在创建两个方法-一个递归地计算数字中数字的总和,另一个迭代计算数字的总和。
我已经创建了递归方法,并且在很大程度上我理解了求数字和的概念,但我不确定如何将其正确地放入迭代方法中。我的代码没有给出正确的输出。
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。您能解释一下我做错了什么吗,以及可能如何修复它?非常感谢。
发布于 2019-06-03 05:04:43
基本上,该算法包括三个步骤:
将数字向上digit = n % 10
通过将数字除以10,sum += digit
n = n / 10
实际上,这将为步骤1“提供”下一个最右边的数字。
重复上述三个步骤,直到number的值变为零。
你可以通过在你的代码中添加一些“调试”信息来帮助自己可视化上面的解释:
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
希望能有所帮助。
https://stackoverflow.com/questions/56010510
复制相似问题