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

JavaScript代码求助:如何移除数组中的非整数因数对?

问题修复:输出整数因数相乘数对

原代码的核心问题是没做整除判断,且循环从0开始导致除以0出现Infinity,同时存在变量重复声明、循环逻辑混乱的问题。以下是具体错误点、修正方案及代码:

原代码的关键错误

  • 循环iterator从0开始,numInput / 0会产生Infinity,完全不符合需求,iterator应从1开始遍历
  • 未判断numInput能否被iterator整除,导致出现小数数对
  • while循环内重复声明numInput和valueArray,第一次输入直接被覆盖,逻辑混乱
  • 注释描述错误,需求是乘法组合而非加法(additive)

修正后的代码

// 先获取有效输入:大于1的整数
let numInput;
do {
  numInput = parseInt(prompt("请输入一个大于1的整数"));
  // 处理无效输入:非数字、小于等于1的情况
  if (isNaN(numInput) || numInput <= 1) {
    if (numInput === null) { // 用户取消输入时退出
      console.log("已退出");
      break;
    }
    alert("请输入大于1的有效整数!");
  }
} while (isNaN(numInput) || numInput <= 1);

if (numInput && numInput > 1) {
  const factorPairs = [];
  // 遍历到平方根即可,减少循环次数,避免重复处理数对
  for (let i = 1; i <= Math.sqrt(numInput); i++) {
    // 整除判断:确保两个因数都是整数
    if (numInput % i === 0) {
      const pair1 = `(${i}, ${numInput / i})`;
      factorPairs.push(pair1);
      // 非平方数时,添加反向数对
      if (i !== numInput / i) {
        const pair2 = `(${numInput / i}, ${i})`;
        factorPairs.push(pair2);
      }
    }
  }
  console.log("相乘等于该数的整数对:" + factorPairs.join(""));
}

修正说明

  1. 输入校验:用do-while循环强制用户输入有效整数,同时处理取消输入的场景
  2. 循环优化:遍历到目标数的平方根,减少不必要的循环次数
  3. 整数判断:通过numInput % i === 0确保两个因数都是整数
  4. 去重处理:遇到平方数(如4)时,只保留一组(2,2),避免重复输出
  5. 变量规范:用let/const代替var,避免变量提升导致的逻辑混乱

测试输入7时,控制台会输出:相乘等于该数的整数对:(1, 7)(7, 1),完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:55:25