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条件が終了しない場合はどうすればよいですか?なぜですか?

4

2 に答える 2

4

あなたは:を分割していiますi/=10。これは、ループの最後でi常にに戻されることを意味します。1除算には一時変数を使用する必要があります。このような:

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

PSコードには他にも多くのエラーがあります。しかし、それらは無限ループとは関係ありません。

于 2012-07-30T11:39:31.470 に答える
4

コードには無限ループがあります:

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

最初のwhile(1 <= n)は常に真です:2番目のループはi=0またはi=1になります!

于 2012-07-30T11:42:08.100 に答える