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
相关产品推荐
相关产品推荐

