让函数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;
}
num1 > num2
时,我们得到num2=smallerNum
,反之亦然?i <= smallerNum
如果i > largestfactor
?答案 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
功能,但它通过设置并在循环中使用它来提高性能,而不是在每次迭代时计算它。它不会改变。
如果smallerNum
,num1>num2
较小,那么我们使用num2
将smallerNum = num2
设置为等于smallerNum
。请注意,这与num2
非常不同,因为它将num2 = smallerNum
设置为等于num2
,更改了smallerNum
而不是num2
的值。使用赋值运算符smallerNum
时的值顺序非常重要。同样的逻辑适用于=
,这是else的目的。
由于数字的因子总是小于或等于数字,因此两个数字的GCF总是小于或等于较小的数字。这就是我们在开始时计算较小数字的原因。只要num2>num1
小于或等于i<=smallerNum
,i
就会告诉循环继续运行,并且一旦不再为真,就会停止。这需要确保我们不会无限增加smallerNum
,因为任何大于较小数字的数字都无关紧要,我们可以在i
等于i
时停止。
smallerNum
比较当前测试的数字是否大于先前找到的因子。这是不需要的,可以删除,因为我们的循环只会上升。进行额外的计算只会减慢程序的速度。