2014-02-24 44 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」,則循環將一直持續。