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

代码中有一个无限循环:

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

第一个 while(1<= n) 始终为真:第二个循环使 i = 0 或 i = 1 !

于 2012-07-30T11:42:08.100 回答
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 回答