GCD 算法不正确

Incorrect GCD algorithm

本文关键字:不正确 算法 GCD      更新时间:2023-10-16

>我的代码中还有其他所有正确内容,除了我的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);
       } 

任何帮助都非常感谢。

你需要在

else 后面加上括号。

else
{
    big = value2;
    small = value1;
}

你忘了用大括号括起来两个语句

   else
     big = value2;
     small = value1;

应有

   else
   {
     big = value2;
     small = value1;
   }

此代码不会执行您认为它执行的操作:

else
     big = value2;
     small = value1;

这是它的实际作用:

else
     big = value2; // Sometimes do this
small = value1;  // ALWAYS do this

以下是您想要的:

else
{
     big = value2;
     small = value1;
}

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

因此,如果"r"第一次不为零,即当do第一次执行时,你的循环将永远持续下去。