iteration - 如何迭代地计算数字中的数字总和 - 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 步“提供”下一个最右边的数字。
重复上述三个步骤,直到 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
希望能帮助到你。
推荐阅读
- nginx - syslog-ng 未过滤远程服务器上的标签
- java - 如何使用 @BeforeEach 方法在 Java 中进行测试?
- ssl - HAProxy:将客户端 ip(ssl 流量)转发到后端
- gitlab - 可以在 gitlab ci runner 上保存 node_models 吗?
- css - 为 ANTD 扩展或自定义 LESS Mixins
- javascript - 在Angular 8中的表格中格式化数据不起作用
- docusignapi - 不清楚 webhook eventNotification 文档
- swift - Swift-无法对齐具有不同字体大小的堆栈元素
- ios - 从 PWA 向 iOS 发送推送通知
- java - Payara Micro 日志记录