You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 14:45:03