GCD算法不正确

时间:2014-02-24 21:19:01

标签: c++

我的代码中还有其他所有内容,除了我的do-while循环计算每次都是零。我不知道为什么会这样。这是代码所在的函数:(我必须使用do while循环)

编辑:即使添加括号后,它仍然会变为0.我使用的示例输入是200和45.答案应该是5正确吗?

    int calculate_GCD(int value1, int value2){
      int big;          
      int small;
      int r;    //remainder
      int GCD;

       if(value1>value2){
         big = value1;
         small = value2;
         }
       else{
         big = value2;
         small = value1;
         }
       do{
         r = big % small;

         if(r == 0)
           GCD = small;
         else{
             big = small;
             small = r;
             } 
         } 
       while(r != 0);

       return(GCD);
       } 

感谢任何帮助。

4 个答案:

答案 0 :(得分:4)

你需要在else之后加上括号。

else
{
    big = value2;
    small = value1;
}

答案 1 :(得分:0)

你忘了在else

之后用括号括起两个语句
   else
     big = value2;
     small = value1;

应该有

   else
   {
     big = value2;
     small = value1;
   }

答案 2 :(得分:-1)

此代码不符合您的预期:

else
     big = value2;
     small = value1;

以下是它的实际作用:

else
     big = value2; // Sometimes do this

small = value1;  // ALWAYS do this

这是你想要的:

else
{
     big = value2;
     small = value1;
}

答案 3 :(得分:-1)

你永远不会改变大小的值 - 他们用计算的mod值来控制r的值。

因此,如果第一次“r”不为零,即第一次执行do-while时,你的循环将永远继续。