我试图找到一个整数数组的最小公倍数,例如如果给出了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)。我无法理解为什么我的代码不起作用。所有评论都表示赞赏。
提前致谢!
答案 0 :(得分:0)
我可能是假的,但你真的永远不会在while循环中改变modSum
吗?如果是这样,这就是你的问题。你想通过使用函数.reduce()
来做到这一点,但是没有绑定给定的函数,所以你必须每次在循环中再次调用该函数。