输入进制,然后输入一个数,计算它逆序相加得到回文数的步数
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
const int len = 1010;
void print(int a[])
{
for(int i=1;i<=a[0];i++)
{
if(a[i]<10) cout << a[i];
else cout <<(char)('A'+a[i]-10);
}
}
int toNum(char ch)
{
if(ch>='0' && ch<='9') return ch-'0';
if(ch>='A' && ch<='Z') return ch-'A'+10;
if(ch>='a' && ch<='z') return ch-'a'+10;
return -1;
}
int match(int a[])
{
for(int i=1;i<=a[0]/2;i++)
{
if(a[i]!=a[a[0]-i+1]) return 0;
}
return 1;
}
void add(int a[],int b[],int n)
{
for(int i=1;i<=a[0];i++) b[i]=a[a[0]-i+1];
b[0]=a[0];//print
print(a);
cout <<"+";
print(b);
cout <<"=";
a[0]++;
for(int i=1;i<=a[0];i++)
{
a[i]+=b[i];
if(a[i]>=n)
{
a[i+1]++;
a[i]%=n;
}
}
if(a[a[0]]==0) a[0]--;
print(a);
cout <<endl;
}
int main(void)
{
int n,a[len],b[len];
cin >> n;
string s;
cin >> s;
for(int i=0;i<len;i++) a[i]=b[i]=0;
a[0]=s.length();
for(int i=1;i<=a[0];i++) a[i]=toNum(s[i-1]);
int cnt=0;
while(!match(a))
{
cnt++;
add(a,b,n);
}
cout << cnt;
return 0;
}