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