2012-07-30 91 views
3

我解決添加範圍之間躺在號碼的最後一位數字的問題(當然,「M」之間和「n」其中m < N)。我已經編寫本什麼是錯的循環

#include <stdio.h> 

int main() 
{ 
int t=0; 
long int m=0,n=0,num=0,sum=0,lsum=0,i=0; 
scanf("%d",&t); 
while(t--){ 
    scanf("%ld%ld",&m,&n); 
    i=m; 
    while(i<=n){ 
     while(i!=0){ 
      num=i%10; 
      i/=10; 
     } 
     lsum=lsum+(sum%10); 
     i++; 
    } 
} 
printf("\n%ld",lsum); 
return 0; 
} 

這裏t =沒有測試用例。 m和n是範圍。我不知道它爲什麼在終端無限運行。我正在使用gcc(4.3.2)編譯器。我可以如何優化它的速度,還是在這種情況下,while條件永遠不會終止,但爲什麼?

+1

您是否嘗試過在調試器中運行它,逐行逐行執行代碼?您可以輕鬆檢查條件和變量,找出問題所在。 – 2012-07-30 11:41:25

+0

使用'for'循環,最好使用'for(i = 0; i ugoren 2012-07-30 12:53:33

回答

4

您將除以ii/=10。這意味着在循環結束時i始終設置爲1。您應該使用臨時變量進行分隔。 想要這樣:

while(i<=n){ 
     int temp = i; 
     while(temp !=0){ 
      num=temp %10; 
      temp /=10; 
     } 
     lsum=lsum+(sum%10); 
     i++; 
    } 

P.S.代碼中有許多其他錯誤。但它們與無限循環無關。

+0

它現在不會無限。謝謝。 – 2012-07-30 11:45:31

4

有無限循環INT的代碼:

while(i<=n) 
{  
    while(i!=0) 
    {   
     num=i%10;   
     i/=10; 
    }  
    lsum=lsum+(sum%10);  
    i++;  
} 

也先(1 < = n)爲總是爲真:第二環路使I = 0或I = 1!