【发布时间】:2016-05-12 19:15:46
【问题描述】:
我正在做一个名为 Smallest Common Multiplier 的 freeCodeCamp 练习。练习的目的如下:
找到所提供参数的最小公倍数 被两者均分,以及除以所有序号 这些参数之间的范围。
范围将是一个由两个数字组成的数组,这两个数字不一定是 按数字顺序排列。
例如对于 1 和 3 - 找到 1 和 3 的最小公倍数 可以被 1 到 3 之间的所有数字整除。
我想我可以通过将传递给函数的数组中的元素从小到大排序来保存它,然后使用 for 循环检查所有数字是否为number % x === 0。然后我将所有内容封装在一个检查分隔符数量的while循环中(如果分隔符的数量小于我正在检查的最高数字,请重复该过程。
看来我写了一个无限循环,导致浏览器崩溃。
function smallestCommons(arr) {
//sort from smallest to largest
arr.sort(function(a, b) {
return a-b;
});
var result = 1;
var divisors = [];
//while number of divisors !== last number to check
while(divisors.length < arr[1]) {
//check if number divides result
for(var x = arr[0]; x < arr[1]; x++) {
//if it divides result
if(result % x === 0) {
//push it to divisors
divisors.push(x);
}
else {
//clear divisors
divisors = [];
}
}
//check next number
result++;
}
return result;
}
smallestCommons([5,1]);
你能指出我做错了什么,或者指出如何进行练习吗?
【问题讨论】:
-
我认为首先要做的是阅读如何找到两个数字的 LCM,将在软件中实现它的任务放在一边。
标签: javascript algorithm