最少公共多个与while循环,Javascript

时间:2018-01-23 13:15:26

标签: while-loop

我试图找到一个整数数组的最小公倍数,例如如果给出了2个数字(7,3),那么我的任务是找到数字3到7的最小公倍数(在这种情况下为3,4,5,6,7)。

我的解决方案是将最大数量添加到一个新变量(var common),直到数组中所有数字的余数(常见的%numBetween [i])等于0.有更有效的方法来执行此操作,例如应用欧几里得算法,但我想以我的方式解决这个问题。

代码:

function smallestCommons(arr) {

var numBetween = [];
var max = Math.max.apply(Math, arr);
var min = Math.min.apply(Math, arr);

while (max - min !== -1) {
  numBetween.push(min);
  min += 1;
} //this loop creates the array of integers, 1 through 13 in this case

var common = max;
var modulus = [1]; //I start with 1, so that the first loop could begin
var modSum = modulus.reduce(function (a, b) {
  return a + b;
}, 0);

while (modSum !== 0) {
  modulus = [];
  for (var i = 0; i < numBetween.length; i++) {
    modulus.push(common % numBetween[i]);
  }
  if (modSum !== 0) {
    common += max;
    break; //without this, the loop is infinite
  }    
}
return common;
}

smallestCommons([1,13]);

现在,循环是无限的(在if语句中没有中断)所以我猜modSum永远不等于0,因为模数变量总是包含0以外的整数。我想通过&#34;重置&#来解决这个问题34;循环开始后的空数组的模数,用

modulus = [];

如果我包含中断,则循环在1次迭代后停止(common = 26)。我无法理解为什么我的代码不起作用。所有评论都表示赞赏。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我可能是假的,但你真的永远不会在while循环中改变modSum吗?如果是这样,这就是你的问题。你想通过使用函数.reduce()来做到这一点,但是没有绑定给定的函数,所以你必须每次在循环中再次调用该函数。