回文数

#include<iostream>
#include<cstring>
using namespace std;
int n,a[101],b[101],ans,i;
void init(int a[])
{
string s;
cin>>n>>s;
memset(a,0,sizeof(a));
a[0]=s.length();
for(i=1;i<=a[0];i++)
if(s[a[0]-i]>='0'&&s[a[0]-i]<='9')
a[i]=s[a[0]-i]-'0'; //输入数字 字符串转为数组
else a[i]=s[a[0]-i]-'A'+10;//将字母转为数字
}
bool check(int a[])
{
for(i=1;i<=a[0];i++)
if(a[i]!=a[a[0]-i+1])return false;
return true;//如果第一个数字与最后一个数字一样为TRUE否则为FALSE;
}
void jia(int a[])
{
for(int i=1;i<=a[0];i++)b[i]=a[a[0]-i+1]; //使b[i]与a[i]数字顺序相反
for(int i=1;i<=a[0];i++) a[i]+=b[i];//使a变为a[i]+b[i];
for(int i=1;i<=a[0];i++)
{a[i+1]+=a[i]/n;
a[i]%=n;
}
//
if(a[a[0]+1]>0) a[0]++;//存储进位
}
int main()
{ init(a);
if(check(a)){cout<<0<<endl;return 0;}//本身就是时输出0;
ans=0;
while(ans++<=30)
{ jia(a);
if(check(a)){cout<<ans<<endl;return 0;}//输出步数
}
cout<<"Impossible";
return 0;
}

原文地址:https://www.cnblogs.com/ling-0-ling/p/5190996.html