Here is my code:
#include<iostream>
#include<string>
#include<string.h>
#define maxn 1007
using namespace std;
typedef struct
{
long l,s[maxn];
}bign;
long n,ans;
bign m;
bool isOK(bign &a)
{
long i=0,j=a.l-1;
while(i<=j)
if(a.s[i]!=a.s[j])
return false;
else{
i++;j--;
}
return true;
}
int main()
{
string st;
memset(&m,0,sizeof(m));
cin>>n>>st;
m.l=st.length();
if(n!=16)
for(long i=m.l-1;i>=0;i--)
m.s[i]=st.at(m.l-i-1)-'0';
else
for(long i=m.l-1;i>=0;i--)
if(st.at(m.l-i-1)>='A'&&st.at(m.l-i-1)<='F')
m.s[i]=st.at(m.l-i-1)-'A'+10;
else if(st.at(m.l-i-1)>='a'&&st.at(m.l-i-1)<='f')
m.s[i]=st.at(m.l-i-1)-'a'+10;
else m.s[i]=st.at(m.l-i-1)-'0';
while(!isOK(m)&&ans<=30)
{
bign t;
memcpy(&t,&m,sizeof(t));
memset(&m,0,sizeof(m));
m.l=t.l;
for(long i=0;i<=t.l-1;i++)
{
m.s[i]+=t.s[i]+t.s[t.l-i-1];
if(m.s[i]>=n)
{
m.s[i+1]++;
m.s[i]-=n;
}
}
if(m.s[m.l]) m.l++;
ans++;
}
if(ans<=30)
cout<<ans<<endl;
else cout<<"Impossible"<<endl;
return 0;
}
posted on 2010-09-27 23:19
lee1r 阅读(297)
评论(1) 编辑 收藏 引用 所属分类:
题目分类:基础/模拟