循环有什么问题

时间:2012-07-30 11:36:59

标签: c performance optimization while-loop infinite-loop

我正在解决一个问题,即在一个范围之间添加数字的最后一位数字(例如,在'm'和'n'之间,其中m

 #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条件永远不会终止,而是为什么?

2 个答案:

答案 0 :(得分: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。您的代码中还有许多其他错误。但它们与无限循环无关。

答案 1 :(得分:4)

代码中存在无限循环:

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

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