最常见的因素解决方案解释

时间:2015-09-02 14:17:10

标签: javascript

让函数Division(num1,num2)同时传递两个参数并返回最大公因子。也就是说,返回最大数字,均匀地进入两个数字而没有余数。例如:12和16都可以被1,2和4整除,因此输出应该是4.两个参数的范围将是1到10 ^ 3。 有人可以在这解释解决方案吗?

function Division(num1, num2) { 
    var largestFactor = 1; 
    var smallerNum; 

    if (num1 > num2) { 
        smallerNum = num2; 
    } else { 
        smallerNum = num1; 
    }          

    for (i = 1; i <= smallerNum; i++) { 
        if ((num1 % i === 0) && (num2 % i === 0) && (i > largestFactor)) { 
            largestFactor = i; 
        } 
    } 
    return largestFactor; 
} 
  • 为什么设置一个新变量= 1?
  • 为什么设置第二个变量?
  • 为什么在num1 > num2时,我们得到num2=smallerNum,反之亦然?
  • 并解释为什么i <= smallerNum如果i > largestfactor

2 个答案:

答案 0 :(得分:0)

  

为什么设置一个新变量= 1?

这是默认值,因此可以将其与计数器进行比较。所有与0不同的数字都具有1的公分母。由于您希望变量仅在函数的上下文中使用而不创建全局变量,因此您可以在循环外定义变量。你不需要将它设置为1,因为你的循环已经覆盖了它,但是你需要摆脱那种毫无意义的比较(看看这个答案的底部)。

  

为什么设置第二个变量?

不可能有一个大于其中一个数字的较大公分母。因此,您应该只检查数字,直到达到最小数字。

  

为什么如果num1&gt; num2,num2 = smallerNum,反之亦然?

如果num1大于num2,则num2是较小的一个。副词,如果num2大于num1,则num1是较小的一个。

  

如果请解释这部分...为什么我&lt; = smallerNum,如果我&gt; largestfactor?

循环从1变为最小数字。 i <= smallerNum表示.. i小于或等于smallerNum继续投放。

i > largestfactor正在将最后已知的最大因子与新因子进行比较。说实话是没有意义的(除了第一次迭代,它总是会返回true,因为1不大于1)。

答案 1 :(得分:0)

它将input.hasNextInt()设置为1,因为1是任何两个大于0的数字的最小GCF,稍后会增加largestFactor以获得实际的GCF。

技术上不需要

largestFactor功能,但它通过设置并在循环中使用它来提高性能,而不是在每次迭代时计算它。它不会改变。

如果smallerNumnum1>num2较小,那么我们使用num2smallerNum = num2设置为等于smallerNum。请注意,这与num2非常不同,因为它将num2 = smallerNum设置为等于num2,更改了smallerNum而不是num2的值。使用赋值运算符smallerNum时的值顺序非常重要。同样的逻辑适用于=,这是else的目的。

由于数字的因子总是小于或等于数字,因此两个数字的GCF总是小于或等于较小的数字。这就是我们在开始时计算较小数字的原因。只要num2>num1小于或等于i<=smallerNumi就会告诉循环继续运行,并且一旦不再为真,就会停止。这需要确保我们不会无限增加smallerNum,因为任何大于较小数字的数字都无关紧要,我们可以在i等于i时停止。

smallerNum比较当前测试的数字是否大于先前找到的因子。这是不需要的,可以删除,因为我们的循环只会上升。进行额外的计算只会减慢程序的速度。