To calculate m^n you don't need to calculate m^n but just calculate (last digit of m)^n . And the last digit can only be from 0 to 9. For each digit there is a repeated sequence. your task is to find that and then just use a switch statement.
int main(){
for (;;){
for (i=0; i<103; i++){
m='\0';
n='\0';
}
scanf("%s %s",m,n);
if ((m[0]=='0')&&(m[1]=='\0')&&(n[0]=='0')&&(n[1]=='\0')){
break;
}
mlen=strlen(m)-1;
nlen=strlen(n)-1;
ml[0]=m[mlen];
nl[0]=n[nlen];
mlast=atoi(ml);
nlast=atoi(nl);
if ((n[0]='0')&&(n[1]='\0')){
printf ("0\n");
}
else if (mlast==1){
printf ("1\n");
}
else if (mlast==2){
if (nlast%4==0){
printf("6\n");
}
else if (nlast%4==1){
printf("2\n");
}
else if (nlast%4==2){
printf("4\n");
}
else if (nlast%4==3){
printf("8\n");
}
}
else if (mlast==3){
if (nlast%4==0){
printf("1\n");
}
else if (nlast%4==1){
printf("3\n");
}
else if (nlast%4==2){
printf("9\n");
}
else if (nlast%4==3){
printf("7\n");
}
}
else if (mlast==4){
if (nlast%2==0){
printf("6\n");
}
else if (nlast%2==1){
printf("4\n");
}
}
else if (mlast==5){
printf("5\n");
}
else if (mlast==6){
printf("6\n");
}
else if (mlast==7){
if (nlast%4==0){
printf("1\n");
}
else if (nlast%4==1){
printf("7\n");
}
else if (nlast%4==2){
printf("9\n");
}
else if (nlast%4==3){
printf("3\n");
}
}
else if (mlast==8){
if (nlast%4==0){
printf("6\n");
}
else if (nlast%4==1){
printf("8\n");
}
else if (nlast%4==2){
printf("4\n");
}
else if (nlast%4==3){
printf("2\n");
}
}
else if (mlast==9){
if (nlast%2==0){
printf("1\n");
}
else if (nlast%2==1){
printf("9\n");
}
}
else if (mlast==0){
printf("0\n");
}
}
return 0;
}
[/c]
void main()
{
long int m,n; char c;
int l,p,a2[4]={6,2,4,8},a3[4]={1,3,9,7},a4[2]={6,4},a7[4]={1,7,9,3},a8[4]={6,8,4,2},a9[2]={1,9};
int mod2,mod4;
while(2)
{
while((c=getchar())!=' '&&c!='\n'&&c!='\t') m=c-48;