题目板块发了,没人回……
#include<stdio.h>
int char_int(char a){
switch(a){
case '0':
return 0;
break;
case '1':
return 1;
break;
case '2':
return 2;
break;
case '3':
return 3;
break;
case '4':
return 4;
break;
case '5':
return 5;
break;
case '6':
return 6;
break;
case '7':
return 7;
break;
case '8':
return 8;
break;
case '9':
return 9;
break;
case 'A':
return 10;
break;
case 'B':
return 11;
break;
case 'C':
return 12;
break;
case 'D':
return 13;
break;
case 'E':
return 14;
break;
case 'F':
return 15;
break;
default:
break;
}
}
char int_char(int a){
switch(a){
case 0:
return '0';
break;
case 1:
return '1';
break;
case 2:
return '2';
break;
case 3:
return '3';
break;
case 4:
return '4';
break;
case 5:
return '5';
break;
case 6:
return '6';
break;
case 7:
return '7';
break;
case 8:
return '8';
break;
case 9:
return '9';
break;
case 10:
return 'A';
break;
case 11:
return 'B';
break;
case 12:
return 'C';
break;
case 13:
return 'D';
break;
case 14:
return 'E';
break;
case 15:
return 'F';
break;
default:
break;
}
}
struct int_{
int a[200];
int n,len;
int_ operator+(int_ x){
int_ ans;
for(int i=0;i<len;i++)
ans.a[i]=a[i]+x.a[i];
for(int i=0;i<len;i++){
ans.a[i+1]+=ans.a[i]/n;
ans.a[i]%=n;
}
while(ans.a[ans.len]){
ans.a[ans.len+1]+=ans.a[ans.len]/n;
ans.a[ans.len++]%=n;
}
return ans;
}
int_ opposite(void){
int_ ans;
ans.len=len;
for(int i=0;i<len;i++)
ans.a[i]=a[len-1-i];
return ans;
}
bool ispal(void){
for(int i=0;i<len/2;i++)
if(a[i]!=a[len-i-1])
return 0;
return 1;
}
}m;
int main(void){
m.len=0;
scanf("%d\n",&m.n);
char tmp;
while((tmp=getchar())!=EOF)
m.a[m.len++]=char_int(tmp);
for(int i=0;i<=30;i++){
if(m.ispal()){
printf("STEP=%d",i);
return 0;
}
m=m+m.opposite();
}
printf("Impossible!");
return 0;
}