编写Armstrong数校验JS程序遇错误:153被误判,求排查
修复Armstrong数判断程序的错误
你的代码存在几个关键问题,导致无法正确判断Armstrong数,以下是问题分析和修复方案:
核心错误点
循环修改了原始输入值,导致判断失效
函数中x在循环里被不断除以10,最终会变成0,此时判断sum == x等价于判断sum == 0,完全偏离了Armstrong数的判断逻辑——应该用计算出的幂和与原始输入值比较。浮点数除法导致循环逻辑错误
x /= 10是浮点数除法,比如153执行后会变成15.3,下一次循环x>0依然成立,会继续处理小数部分,导致幂和计算错误。必须用整数除法确保每次只去掉最后一位整数。依赖全局变量的不规范写法
变量c(位数)定义在全局,函数依赖外部变量才能运行,降低了代码的独立性和可维护性。
修正后的代码
const isArmstrongNumber = (num) => { if (num < 0) { console.log("负数不是Armstrong数"); return; } const originalNum = num; const digitCount = String(num).length; let sum = 0; while (num > 0) { const lastDigit = num % 10; sum += lastDigit ** digitCount; num = Math.floor(num / 10); // 整数除法,确保每次去掉最后一位 } if (sum === originalNum) { console.log("这是Armstrong数"); } else { console.log("这不是Armstrong数"); } }; let input = prompt("请输入一个数字"); const number = Number.parseInt(input); if (isNaN(number)) { console.log("请输入有效的数字"); } else { isArmstrongNumber(number); }
修正说明
- 保存原始输入值
originalNum,用于最终的幂和比较 - 使用
Math.floor(num / 10)实现整数除法,保证循环正确终止 - 函数内部计算数字位数,不再依赖全局变量,提升代码封装性
- 增加输入验证,处理非数字输入的情况
- 函数名改为更符合规范的
isArmstrongNumber
内容的提问来源于stack exchange,提问作者Prashant Patel
相关产品推荐
相关产品推荐

