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

charAt函数输出异常求助:str为30时charAt(0)返回51

阿姆斯特朗数函数的问题修复

核心问题:字符转数字错误

str.charAt(i)返回的是字符的ASCII码值,比如字符'3'对应的ASCII码就是51,这不是你要的数字3。要把字符转成对应整数,只需要用str.charAt(i) - '0'——因为ASCII表中'0'到'9'是连续排列的,用目标字符减去'0'的ASCII值,就能得到对应的数字。

代码里的其他错误

除了字符转数字的问题,你的代码还有两个关键bug:

  • 内层循环始终取str.charAt(0),也就是只处理第一个数位,比如数字30只会计算3的幂,完全忽略了0这个数位;
  • result=+Math.pow(base,len)是赋值操作,不是累加,每次循环都会把result覆盖成当前的幂值,正确的写法应该是result += Math.pow(...)。

修复后的完整代码

private static void handleArmstrong(int parameter) {
    for (int number = 0; number <= parameter; number++) {
        String str = Integer.toString(number);
        int len = str.length();
        double result = 0;
        for (int i = 0; i < len; i++) {
            // 字符转数字:减去'0'的ASCII值
            int base = str.charAt(i) - '0';
            // 累加每个数位的len次幂
            result += Math.pow(base, len);
        }
        // 判断是否是阿姆斯特朗数并输出
        if (result == number) {
            System.out.println(number + " 是阿姆斯特朗数");
        }
    }
}

额外说明

  • 把number < parameter+1改成number <= parameter,逻辑更清晰,效果一致;
  • 阿姆斯特朗数的定义是:一个n位数,其各位数字的n次方之和等于它本身,比如153=1³+5³+3³,修复后的代码会正确计算并输出符合条件的数。

内容的提问来源于stack exchange,提问作者Xayyna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:52:10