循环出了什么问题?

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
你尝试在调试器中逐行运行代码吗?这样你可以轻松检查条件和变量,找出问题所在。 - Some programmer dude
使用for循环,最好采用for (i=0; i<SOMETHING; i++)的形式。这种形式非常难出错。 - ugoren
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++;
    }

顺便提一下,你的代码中还有很多其他错误。但它们与无限循环无关。


现在它不会无限循环了。谢谢。 - Tapasweni Pathak

4
代码中存在无限循环:
 while(i<=n)
 {       
     while(i!=0)
   {        
      num=i%10;        
      i/=10; 
   }       
   lsum=lsum+(sum%10);       
   i++;    
 }

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接