解题思路:
参考代码:
#include <stdio.h> #include <string.h> 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<i) { 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; }
0.0分
0 人评分