0

function lcm(arr) {
  arr = arr.sort(function(a, b) {
    return a - b;
  });
  var j = 1;
  var num = arr[0];
  for (i = 1; i < arr.length; i++) {
    while (num % arr[i] !== 0) {
      j = j + 1;
      num = j * arr[0];
    }
    arr[0] = num;
  }
  return num;
}

console.log(lcm([3, 5, 6, 10]));

我试图找到数组中一系列数字的最小公倍数。该代码适用于具有两项的数组,但是具有两项以上的数组的输出似乎超出了预期值。谁能帮我找到我的代码中的错误?

谢谢

4

1 回答 1

2

设置j1每次通过循环遍历数组元素。否则,当您处理下一个数字时,您将从一个高乘数开始。

// function that find the least common multiple
function lcm(arr) {
  arr = arr.sort(function(a, b) {
    return a - b;
  });
  var num = arr[0];
  for (i = 1; i < arr.length; i++) {
    var j = 1;
    while (num % arr[i] !== 0) {
      j = j + 1;
      num = j * arr[0];
    }
    arr[0] = num;
  }
  return num;
}

console.log(lcm([3, 5, 6, 10]));

于 2017-06-23T18:54:27.893 回答