Я написал следующий код, чтобы узнать значение в единичное место возведения в степень а ^ Ь (http://www.spoj.com/problems/LASTDIG/). Он работает нормально для всех тестовых случаев, кроме случаев, когда а = 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.
РЕДАКТИРОВАТЬ: я теперь записал вывод в файл. Это все еще не представляло никаких проблем. Мне нужно больше информации от вас. С другой стороны, вы пытались выключить и снова включить компьютер?