算法做回文数
写一个程序,给定一个n(2<n<=10或n=16)进制数m。求最少几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible"。#include<iostream>
#include<cstring>
using namespace std;
int n,a[100],b[100],step=0,i;
void in(int a[])
{
string s;
cin>>n>>s;
memset(a,0,sizeof(a));
a[0]=s.length();
for(int i=1;i<=a[0];i++)
a[i]=s[i-1];
for(int i=1;i<=a[0];i++)
cout<<"s:"<<s[i]<<" ";
cout<<endl;
}
bool check(int a[])
{
for(i=1;i<=a[0];i++)
if(a[i]!=a[a[0]-i+1])return false;
return true;
}
void jia(int a[])
{
int i,k;
for(i=1;i<=a[0];i++) b[i]=a[a[0]-i+1];
for(i=1;i<=a[0];i++) a[i]+=b[i];
for(i=1;i<=a[0];i++)
{
a[i+1]+=a[i]/n;
a[i]%=n;
}
for(int i=1;i<=a[0];i++) cout<<a[i];
cout<<endl;
if(a[a[0]+1]>0) a[0]++;
}
int main()
{
in(a);
if(check(a))
{
cout<<0<<endl;
system("pause");
return 0;
}
while(step<=30)
{
step++;
jia(a);
if(check(a))
{
cout<<step<<endl;
system("pause");
return 0;
}
}
cout<<"Impossible"<<endl;
system("pause");
return 0;
}
请问这个程序哪里不对。