[英]Find highest common factor between two numbers
我正在尝试确定两个数字之间的最高公因数。 这是我的代码
function Division(num1,num2) {
var sum = 1
//contain all divisor which can divide num without remainder
var num1_divisor = []
var num2_divisor = []
//if num1%divisor == 0 , store in num1 divisor
for (var i = 1 ; i < num1 ; i++)
{
if ( num1 % i == 0 )
{
num1_divisor.push(i)
}
}
console.log(num1_divisor)
//if num2%divisor == 0 , store in num1 divisor
for (var i = 1 ; i < num1 ; i++)
{
if ( num2 % i == 0 )
{
num2_divisor.push(i)
}
}
console.log(num2_divisor)
//if num1_divisor is contained in num2 divisor
//mulitply them by sum
for ( var i = 0 ; i < num1.length ; i++)
{
var num1_value = num1_divisor[i]
for ( var j = 0 ; j < num2.length ; j++)
{
var num2_value = num2_divisor[j]
if (num1_value == num2_value )
{
sum = sum * num2_value
}
}
}
return sum
}
该程序的逻辑如下:对于num1和num2,它将所有可整除的值分别存储在num1_divisor和num2_divisor中。 然后,我将num1_divisor和num2_divisor之间的所有公有值相乘,以找出两个数字之间的最高公因数。
我已经检查了程序,比较部分似乎有错误
if (num1_value == num2_value )
{
sum = sum * num2_value
}
由于我未知的原因,尽管两个数字相同,但num1_value不等于num2_value。
一个示例案例为Division(10,12),尽管返回2,但返回1
我将不胜感激任何帮助
谢谢
没有数字的length
,您可能想要检查num1_divisor.length
而不是num1.length
和num2_divisor.length
而不是num2.length
另外,您需要确保用于查找除数的循环包括数字本身,因为数字是其自身的除数。
for (var i = 1 ; i <= num1 ; i++)
和
for (var i = 1 ; i <= num2 ; i++)
经过这些更改后,结果似乎是正确的。
这是寻找最大公因数的简化版本,
// Generate an array from 0 to limit function range(limit){ return Array.apply(null, Array(limit)).map(function (_, i) {return i;}); } function greatestCommonFactor(number1, number2){ // Figure out who's larger and smaller var largerNumber = Math.max(number1, number2); var smallerNumber = Math.min(number1, number2); // Use a range to avoid using counters and increments var numbersUpToLargest = range(largerNumber + 1).slice(1); // Find the numbers that divide the larger number perfectly var largeNumberFactors = numbersUpToLargest.filter(function(number){ return !(largerNumber % number); }); // With the larger number's factors, find the ones that divide the smaller number perfectly var commonFactors = largeNumberFactors.filter(function(factor){ return !(smallerNumber % factor); }); // Since we ordered from lowest to highest, reverse the array and get the first. return commonFactors.reverse()[0]; } alert(greatestCommonFactor(10, 12));
我在您的代码中发现了问题,问题不在您怀疑的地方,而在两个for循环中,您在其中找到了除数数组的长度。 代替使用“ num1.length”,您需要使用“ num1_divisor.length”。 同样,您需要使用“ num2_divisor.length”代替“ num2.length”
更正的版本如下:
function Division(num1,num2) {
var sum = 1
//contain all divisor which can divide num without remainder
var num1_divisor = []
var num2_divisor = []
//if num1%divisor == 0 , store in num1 divisor
for (var i = 1 ; i < num1 ; i++)
{
if ( num1 % i == 0 )
{
num1_divisor.push(i)
}
}
//alert(num1_divisor)
//if num2%divisor == 0 , store in num1 divisor
for (var i = 1 ; i < num1 ; i++)
{
if ( num2 % i == 0 )
{
num2_divisor.push(i)
}
}
//alert(num2_divisor)
//if num1_divisor is contained in num2 divisor
//mulitply them by sum
//alert(num2_divisor.length);
for ( var i = 0 ; i < num1_divisor.length ; i++)
{
// alert(i);
var num1_value = num1_divisor[i]
for ( var j = 0 ; j < num2_divisor.length ; j++)
{
var num2_value = num2_divisor[j]
//alert( num1_value);
//alert( num2_value);
if (num1_value == num2_value )
{
//alert(sum);
sum = sum * num2_value
}
}
}
return sum
}
您可以在此处运行代码
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.