#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);
}
没看懂

京公网安备 11010502036488号