特定输入的意外行为
Unexpected behavior for a particular input
我写了下面的代码来找出幂a^b的单位位置中的值(http://www.spoj.com/problems/LASTDIG/).它适用于所有测试用例,除了 a=1 时。当 a=1 时,它开始在命令提示符下(虽然不是在在线编辑器上)无限地打印输出(即 1)。此外,仅当输入如下时才会显示此意外行为:
1个
1(这里的任何数字作为指数)
而不是什么时候:
1个
(除 1 以外的任何数字)(这里的任何数字作为指数)。
代码如下:
#include<stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t--){
int a;
scanf("%d",&a);
if(a==1){ //Although a==1 the continue statement behaves abnormally
printf("1\n");
continue;
}
printf("Hello man 2! :)\n");
int end=1,i,unit[500],temp=1;
long long b;
scanf("%lld",&b);
if(b==0){
printf("1\n");
continue;
}
unit[0]=1;
bool goOn=true,marker=false;
while(goOn){
temp*=a;
for(i=0; i<end; i++){
if(unit[i]==(temp%10) && (temp%10)!=1)
marker=true;
}
if(marker)
goOn=false;
if(!marker){
unit[end]=(temp%10);
end++;
}
}
int tmp=b%(end-1);
if(tmp==0)
printf("%d\n",unit[(end-1)]);
else
printf("%d\n",unit[(tmp)]);
}
return 0;
}
什么可能导致这种异常行为,我该如何纠正?
我检查了代码,它工作正常。正如您所指出的,此错误仅发生在命令提示符下,而不发生在在线编辑器上,可能的原因可能是您的编译器。你用哪一个?或者您可以提供一些其他详细信息。
我在下面附上了它在我的终端中运行的屏幕截图。仅供参考,我使用的是 gcc 4.9.1 版。
编辑:我现在将输出写入文件。它仍然没有出现任何问题。我需要你提供更多信息。在较轻松的方面,您是否尝试过关闭并重新打开计算机?
我写了下面的代码来找出幂a^b的单位位置中的值(http://www.spoj.com/problems/LASTDIG/).它适用于所有测试用例,除了 a=1 时。当 a=1 时,它开始在命令提示符下(虽然不是在在线编辑器上)无限地打印输出(即 1)。此外,仅当输入如下时才会显示此意外行为: 1个 1(这里的任何数字作为指数) 而不是什么时候: 1个 (除 1 以外的任何数字)(这里的任何数字作为指数)。
代码如下:
#include<stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t--){
int a;
scanf("%d",&a);
if(a==1){ //Although a==1 the continue statement behaves abnormally
printf("1\n");
continue;
}
printf("Hello man 2! :)\n");
int end=1,i,unit[500],temp=1;
long long b;
scanf("%lld",&b);
if(b==0){
printf("1\n");
continue;
}
unit[0]=1;
bool goOn=true,marker=false;
while(goOn){
temp*=a;
for(i=0; i<end; i++){
if(unit[i]==(temp%10) && (temp%10)!=1)
marker=true;
}
if(marker)
goOn=false;
if(!marker){
unit[end]=(temp%10);
end++;
}
}
int tmp=b%(end-1);
if(tmp==0)
printf("%d\n",unit[(end-1)]);
else
printf("%d\n",unit[(tmp)]);
}
return 0;
}
什么可能导致这种异常行为,我该如何纠正?
我在下面附上了它在我的终端中运行的屏幕截图。仅供参考,我使用的是 gcc 4.9.1 版。
编辑:我现在将输出写入文件。它仍然没有出现任何问题。我需要你提供更多信息。在较轻松的方面,您是否尝试过关闭并重新打开计算机?