我正在解决一个问题,即在一个范围之间添加数字的最后一位数字(例如,在'm'和'n'之间,其中m 这里t =没有测试用例。 m和n是范围。我不知道为什么它在终端无限运行。我正在使用gcc(4.3.2)编译器。如何优化它以提高速度,或者是因为while条件永远不会终止,而是为什么? #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;
}
答案 0 :(得分: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++;
}
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!