代码改了好多次,但是比较简单,不重新修了
#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;
}

京公网安备 11010502036488号