2014-02-24 42 views
-4

我的代码中有其他所有东西,除了我的do-while循环的计算每次都会变为零。我不知道为什么会发生这种情况。这里是代码的功能:(我必须使用do while循环)不正确的GCD算法

编辑:即使在添加括号后,它仍然会变为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); 
     } 

任何帮助表示赞赏谢谢。

+2

你写的代码,所以你知道发生了什么。只需使用调试器即可手动查看它出错的地方。以一个示例输入为例,通过代码查看它与预期的偏离的位置... – PaulMcKenzie

+1

如果r是两个整数之间的整数除法的余数,它肯定会变为0! – morepaolo

+0

关于你的编辑:更正的代码工作正常,你记得重新编译? – Leeor

回答

4

您需要在else之后加括号。

else 
{ 
    big = value2; 
    small = value1; 
} 
-1

此代码不会做你认为它的作用:

else 
    big = value2; 
    small = value1; 

这里是它实际上做:

else 
    big = value2; // Sometimes do this 

small = value1; // ALWAYS do this 

这里有你想要的东西:

else 
{ 
    big = value2; 
    small = value1; 
} 
0

你忘了用大括号括起来在其他

else 
    big = value2; 
    small = value1; 

后atements应当有

else 
    { 
    big = value2; 
    small = value1; 
    } 
-1

你永远不会改变的值大小 - 他们通过控制自己的计算模值的r值。

因此,如果“r”在第一次执行时不是零,即第一次执行的时间为“0”,则循环将一直持续。