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

JS阿姆斯特朗数程序输出异常,请求排查代码Bug

阿姆斯特朗数判断代码的错误分析及修复

你的代码存在两个核心问题,导致无法正确识别阿姆斯特朗数:

1. 错误使用浮点数除法

在两个while循环中,你使用普通除法num = num /10,会让num变成浮点数(比如输入153时,第一次循环后num变为15.3),引发两个关键错误:

  • 统计数字位数的循环中,num永远不会精确等于0,导致位数c的计数远大于实际值;
  • 计算幂值的循环中,num %10会得到小数余数(比如15.3%10=5.3),后续幂值计算完全错误,同时num无法正确终止循环。

2. 循环内变量逻辑冗余(非核心但可优化)

原代码中用temp和循环计算幂值的逻辑没问题,但结合错误的除法逻辑,会进一步放大计算误差,且代码冗余。

修复后的代码

<script>
    let a, num, c=0, sum=0, rem;

    a = Number(prompt("Enter a number"));

    num = a;
    while(num !== 0){
        num = Math.floor(num / 10); // 改用整数除法,确保num始终为整数
        c++;
    }

    num = a;
    while(num !== 0){
        rem = num % 10;
        sum += Math.pow(rem, c); // 用Math.pow直接计算幂,简化逻辑
        num = Math.floor(num / 10); // 同样改用整数除法
    }

    if (a === sum) {
        document.write("number is armstrong number");
    } else {
        document.write("number is not armstrong number");
    }
</script>

额外优化说明

  • 移除了冗余的pow、temp变量,用Math.pow直接计算数字的幂,简化代码结构;
  • 使用严格相等===替代==,提升代码严谨性;
  • 如果坚持保留原循环计算幂值的逻辑,需给循环变量i添加let声明(let i=1),避免污染全局作用域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:03:22