解题思路:
参考代码:#include
#include
int ishw(char *m)
{
int len=strlen(m);
int i=0,j=len-1,flag=1;
while(i<=j)
{
if(m[i]!=m[j])
{
flag=0;break;
}
i++;
j--;
}
return flag;
}
void getReverse(char *m,char *re_m)
{
int len=strlen(m);
int i=len-1,j=0;
for(;i>=0;i--,j++)
{
re_m[j]=m[i];
}
re_m[j]='\0';
}
void addToM(int n,char *m,char *re_m)
{
int i=0,j;
int a[20];
memset(a,0,sizeof(a));
while(m[i]!='\0')
{
if(m[i]>='A'&&m[i]<='Z') a[i]+=(int)((m[i]-'A')+10);
else a[i]+=(m[i]-'0');
if(re_m[i]>='A'&&re_m[i]<='Z') a[i]+=(int)((re_m[i]-'A')+10);
else a[i]+=(re_m[i]-'0');
i++;
}
j=0;
while(j
{
a[j+1]+=(a[j]/n);
if(n<=10)
{m[j]=a[j]%n+'0';}
else{
if((a[j]%n)>=10) m[j]='A'+(a[j]%n-10);
else m[j]=a[j]%n+'0';
}
j++;
}
if(a[j]>=10) {m[j]=(a[j]-10)+'A';m[j+1]='\0';}
else if(a[j]>0) {m[j]=a[j]+'0';m[j+1]='\0';}
else m[j]='\0';
}
int main()
{
int n,cnt=0;
char m[100],re_m[100];
scanf("%d",&n);
scanf("%s",m);
while(!ishw(m)&&cnt<=30)
{
getReverse(m,re_m);
addToM(n,m,re_m);
cnt++;
}
if(!ishw(m)) printf("Impossible");
else printf("STEP=%d",cnt);
return 0;
}