代码改了好多次,但是比较简单,不重新修了
#include<stdio.h> long long fun(long long M,int N)//转化进制 {if(N!=16) { if(M/N==0) return M%N; else return M%N+fun(M/N,N)*10; } else { if(M/16==0) return M%16; else return M%16+fun(M/16,16)*10; } } long long fan(long long M,int N)//得到从右往左的数 { long long k=0,l=0; if(N!=16) { while(M) { l=M%10; k=k*10+l; M/=10; } } else { while(M) { l=M%16; k=k*16+l; M/=16; } } return k; } long long hui(long long k,int N)//得到十进制数 { long long t=0; int i=0; while(k) { long long c =1; for(int j=0;j<i;j++) { c*=N; } t+=c*(k%10); i++; k/=10; } return t; } int judge(long long a,int N)//判断是否为回文数 { long long b=0; long long d=a; if(N!=16) { while(d) { int c=d%10; b=b*10+c; d/=10; } } else { while(d) { int c=d%16; b=b*16+c; d/=16; } } if(b==a) return 1; else return 0; } int step(long long M,int N,int q)//创造顺序 { long long x=fan(M,N); long long a=hui(M,N)+hui(x,N); a=fun(a,N); int b=judge(a,N); if(b==0) { q++; if(q<=30)//这个地方可以多看看 { return step(a,N,q); } } if(q>=30) return 0; else return q; } int main() { long long M; int N,i=1; scanf("%d",&N); if(N==16) { scanf("%X",&M); } else { scanf("%lld",&M); } int c=step(M,N,i); if(c==0) printf("Impossible!"); else printf("STEP=%d",step(M,N,i)); return 0; }