Java数字各位求和方法输入11111返回错误结果该如何处理?
问题原因
你的getNumber方法存在2个逻辑错误,共同导致了大数字输入时结果不符合预期:
- 你在循环条件中每次都调用
getDigits(y)获取位数,但循环过程中你一直在修改y的值(每次除以10),y的位数会不断变小,导致循环提前终止。比如输入11111时,循环执行到第4次时y已经变成11,位数为2,循环条件直接不满足退出,只累加了前3位的1,结果就是3。 - 你额外加了
if (y < 10 && y > 0)的判断逻辑,会重复累加最后一位数字,虽然位数少的时候刚好能抵消循环次数不够的问题,让结果看起来正确,但一旦位数变多就会出错。同时循环条件写的i <= 位数也多了一次不必要的循环判断。
修复方案
最小改动适配现有逻辑
public class test_2 { public static int getDigits(int x) { int counter = 0; while (x > 0) { x /= 10; counter++; } return counter; } public static int getNumber(int y) { int New = 0; // 提前存储初始数字的位数,不要在循环中重复计算 int digits = test_2.getDigits(y); // 循环次数调整为小于位数,去掉多余的等于判断 for (int i = 0; i < digits; i++) { New += (y % 10); y /= 10; // 删除多余的最后一位重复累加逻辑 } return New; } }
更简洁的优化实现
数字各位求和完全不需要提前计算位数,直接用while循环即可,代码更精简性能也更好:
public static int getNumber(int y) { int sum = 0; while (y > 0) { sum += y % 10; y /= 10; } return sum; }
修复后输入11111即可得到预期结果5。
内容的提问来源于stack exchange,提问作者avihu24
相关产品推荐
相关产品推荐

