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

编写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);
}

修正说明

  1. 保存原始输入值originalNum,用于最终的幂和比较
  2. 使用Math.floor(num / 10)实现整数除法,保证循环正确终止
  3. 函数内部计算数字位数,不再依赖全局变量,提升代码封装性
  4. 增加输入验证,处理非数字输入的情况
  5. 函数名改为更符合规范的isArmstrongNumber

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:32:50