找出两个数字之间的最高公因数

时间:2015-08-11 16:22:33

标签: javascript debugging comparison

我试图确定两个数字之间的最高公因数。 这是我的代码

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

我将不胜感激任何帮助

由于

3 个答案:

答案 0 :(得分:1)

数字中没有length,您可能想检查num1_divisor.length而不是num1.lengthnum2_divisor.length而不是num2.length

此外,您需要确保用于查找除数的循环包含数字本身,因为数字是其自身的除数。

for (var i = 1 ; i <= num1 ; i++)

for (var i = 1 ; i <= num2 ; i++)

在这些变化之后,结果似乎是正确的。

答案 1 :(得分:1)

这是一个寻找最大公因素的简单版本,应该

&#13;
&#13;
P.charAt(i-1)!=T.charAt(j-1)?1:0    
&#13;
&#13;
&#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