【问题标题】:what is wrong with the loops循环有什么问题
【发布时间】:2012-07-28 01:50:28
【问题描述】:

我正在解决添加位于范围之间的数字的最后一位的问题(例如,在“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 条件永远不会终止的情况,但为什么?

【问题讨论】:

  • 您是否尝试过在调试器中运行它,逐行执行代码?您可以轻松检查条件和变量,找出问题所在。
  • 使用for 循环,最好是for (i=0; i&lt;SOMETHING; i++) 形式。这种形式真的很难出错。

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


【解决方案1】:

您正在划分ii/=10。这意味着i 在循环结束时总是设置回1。您应该使用临时变量进行划分。 像这样:

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

附:您的代码中还有许多其他错误。但它们与无限循环无关。

【讨论】:

  • 它现在不是无限的。谢谢。
【解决方案2】:

代码中有一个无限循环:

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

第一个 while(1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 2013-03-13
    • 1970-01-01
    • 2011-04-23
    • 2020-07-09
    • 2016-04-26
    相关资源
    最近更新 更多