我试图确定两个数字之间的最高公因数。 这是我的代码
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),它返回1但它应该返回2
我将不胜感激任何帮助
由于
答案 0 :(得分: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++)
在这些变化之后,结果似乎是正确的。
答案 1 :(得分:1)
这是一个寻找最大公因素的简单版本,应该
P.charAt(i-1)!=T.charAt(j-1)?1:0
&#13;
答案 2 :(得分:1)
我在你的代码中发现了这个问题,问题不是你怀疑的地方,而是在两个for循环中,你在哪里找到除数数组的长度。而不是使用“num1.length”,你需要使用“num1_divisor.length”。同样地,而不是“num2.length”,你需要我们“num2_divisor.length”
更正版本如下:
private static function getObjFile(geometry:Geometry):String {
var objFile:String = "" ;
var i:int = 0;
var pri:int = 0;
var sg:SubGeometry;
var b:uint = 0;
for each(sg in geometry.subGeometries){
objFile += "\no";
i = 0;
for each(var v:Number in sg.vertexData){
if(i%3 == 0) objFile += "\nv";
i++;
objFile += " " + setPrecision(v, 1000);
}
i=0;
for each(var v:Number in sg.UVData){
if(i%2 == 0) objFile += "\nvt";
i++;
objFile += " " + setPrecision(v, 1000);
}
b = 0;
for each(var ind:uint in sg.indexData){
if(b%3 == 0) objFile += "\nf";
b++;
objFile += " " + String(ind + 1 + pri)+"/"+String(ind + 1 + pri);
}
b = 0;
for each(var n:Number in sg.vertexNormalData) {
if (b % 3 == 0) objFile += "\nvn";
objFile += " " + setPrecision(n, 1000);
b++;
}
pri = i /3;
}
return objFile;
}
您可以运行代码here