#include <stdio.h>
#include<malloc.h>
#include<string.h>

char c[100]={0};  //存放

int Ishuiwen(char *str ,int len)
{
     int left=0;
     int right=len-1;
     while(left<right)
     {
         if(str[left++]!=str[right--])  //左右只要有一个不等就不是回文
         {
             return 0;
             break;
         }
     }
   return 1;
}


int getInt(int n)
{
    if(n>='0'&&n<='9')  //是数字
         return n-'0';
    else                //不是数字
        return n-'A'+10;
}

char getChar(int n)
{
    if(n>=0&&n<=9)
       return n+'0';
    else
       return n-10+'A';

}


void add(char *str ,int n ,int len)
{
    int sum1=0,sum2=0;
    int begin=0,tail=0;
    int end=len-1;
    int i=0;
    while(end>=0)
    {
         sum1=getInt(str[begin]);  //转为int 型
         sum2=getInt(str[end]);    
         c[i]=getChar((sum1+sum2+tail)%n);   //转为十进制
         tail=(sum1+sum2+tail)/n;
         end--;
         begin++;
         i++;

    }

    while(tail>0)
    {
        c[i]=getChar(tail%n);
        tail/=n;
        i++;
    }
}


int main()
{
    int n,m;
    int step=0;
    char*str=(char*)malloc(100*sizeof(char));
    scanf("%d",&n);
    getchar(); //换行符的接受
    scanf("%s",str);  //M
    int len=strlen(str);

    if(Ishuiwen(str, len))  //这个数本来就已经是回文了
    {
        printf("STEP=%d\n",1);
    }

    while(!Ishuiwen(str,len))  //一开始不是回文
    {
        add(str,n,len);  //相加函数
        strcpy(str,c);
        len=strlen(c);
        step++;
        if(step>=31)
        {
            printf("Impossible!\n");
            return 0;
        }

    }

printf("STEP=%d\n",step);
}

没看懂