菜鸟生成记(31)
P1015 NOIP1999 普及组 回文数
这一题和C语言网上的一模一样(这一题的数据更强一些)
#include<iostream>
using namespace std;
#define N 1000;
char m[N]={0};
int a1[N],sum1[N],flag=0,n=0,l=0;
int fun(int s[],int len)
{
for(int i=0;i<len/2;i++)
if(s[i]!=s[len-1-i])
return 0;
return 1;
}
void f()
{
if(n<=10)
{
for(int i=0;i<strlen(m);i++)
a1[i]=m[i]-'0';
l=strlen(m);
}
else
{
for(int i=0;i<strlen(m);i++)
{
if(!(m[i]>='0'&&m[i]<='9'))
a1[i]=m[i]-'A'+10;
else
a1[i]=m[i]-'0';
}
l=strlen(m);
}
}
void add(int k,int len)
{
if(k>30)
{
flag=1;
return;
}
if(fun(a1,len)==1)
{
cout<<"STEP="<<k<<endl;
return;
}
else
{
int s=0,t=0;
for(int i=0;i<len;i++)
{
s=a1[i]+a1[len-1-i]+t;
sum1[i]=s%n;
t=s/n;
}
if(t!=0)
sum1[len]=t,len++;
for(int i=0;i<len;i++)
a1[i]=sum1[i];
add(k+1,len);
}
}
int main()
{
cin>>n;
cin>>m;
f();
add(0,l);
if(flag==1)
cout<<"Impossible!"<<endl;
return 0;
}