Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 理解代码中的while循环以找到最小的公共倍数_Javascript_While Loop - Fatal编程技术网

Javascript 理解代码中的while循环以找到最小的公共倍数

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); /

有人能解释/分解这段代码中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); //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;
}