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