Javascript 理解代码中的while循环以找到最小的公共倍数
有人能解释/分解这段代码中while循环中的代码吗?我正在freecodecamp上进行“查找最小公共倍数”挑战。据我所知,我还添加了评论Javascript 理解代码中的while循环以找到最小的公共倍数,javascript,while-loop,Javascript,While Loop,有人能解释/分解这段代码中while循环中的代码吗?我正在freecodecamp上进行“查找最小公共倍数”挑战。据我所知,我还添加了评论 function smallestCommons(arr) { var min = Math.min(arr[0], arr[1]) var max = Math.max(arr[0], arr[1]) var range = [] for(var i = min; i<=max; i++){ range.push(i); /
function smallestCommons(arr) {
var min = Math.min(arr[0], arr[1])
var max = Math.max(arr[0], arr[1])
var range = []
for(var i = min; i<=max; i++){
range.push(i); //array of numbers between min and max
}
var a = Math.abs(range[0]) //absolute position of negative nums from 0
for(var j=1; j<range.length; j++){
var b = Math.abs(range[j]); //iterating range array
var c = a;
while(a && b){ //filtering 0. will continue looping as long as a and b is NOT 0
if(a>b) {
a = a%b; //then we will change the value of a to the remainder of a/b
} else {
b= b%a; //changing the value of b
}
}
a = Math.abs(c*range[j] /(a + b));
}
return a;
}
smallestCommons([1,5]);
function smallestCommons(arr){
var min=Math.min(arr[0],arr[1])
var max=Math.max(arr[0],arr[1])
变量范围=[]
对于(var i=min;i基本上,算法循环遍历所有数字,并通过将当前运行的SCM乘以仅出现在下一个数字中的任何新因子(例如,将当前数字除以GCD(运行的SCM,当前数字)后剩下的因子)来计算运行的最小公倍数
function smallestCommons(arr){
//查找从arr[0]到arr[1]的所有整数的最小公倍数
var min=Math.min(arr[0],arr[1]);//获取起始编号
var max=Math.max(arr[0],arr[1]);//获取结束数字
var range=[];//所有数字的数组
对于(var i=min;我觉得你对它有很好的把握。你到底在努力做什么?a=a%b
?也就是说,给你一个正确的方向:)如果你想学习的话,这似乎是你应该查找并自己做的事情。请注意,理解模运算背后的数学知识会很有帮助。顺便说一句,你对var a
的评论毫无意义。谢谢@Obsidiage!我知道“a=a%b;”会将a的值更改为a/b的其余部分,但我就是无法理解其背后的逻辑哈..N哦,问题!文档确实有点混乱,所以请记住模只是a/b
…余数就是您所关心的。在a=a%b
中,将a
除以b
,并将余数存储在等号左边的任何位置(在本例中,它覆盖了a
)。例如,5%2
将是1
,因为2
两次进入5
,剩下1
。while循环(以及一些周围的代码)是查找最大公约数的方法的实现。
function smallestCommons(arr) {
// find the smallest common multiple of all the integers from arr[0] to arr[1]
var min = Math.min(arr[0], arr[1]); // get the starting number
var max = Math.max(arr[0], arr[1]); // get the ending number
var range = []; // array of all the numbers
for(var i = min; i<=max; i++){
range.push(i); //array of numbers between min and max
}
var a = Math.abs(range[0]); // start with first number
for(var j=1; j<range.length; j++) { // compute over remaining numbers in range
var b = Math.abs(range[j]); // get the next number to process
var c = a; // remember starting point for end
while(a && b){ // find the GCD of a & b
if(a>b) {
a = a%b;
} else {
b = b%a;
}
}
// the GCD will be in a or b, whichever is not zero
// compute the smallest common multiple of the numbers from range[0] to range[j]
// by multiplying in the remaining factors after removing the GCD
// which is range[j] / (a+b) since either a or b is the GCD
a = Math.abs(c*range[j] /(a + b));
}
return a;
}