#include <iostream> #include <cstdio> using namespace std; string m,toc="0123456789abcdef"; int n,cnt; string rev(string s)//翻转字符串 { string res=""; for (int i=s.size();i>0;--i) res+=s[i-1]; return res; } bool hw(string s)//判断是否为回文 { string s1,s2; s1=s.substr(0,s.size()/2); s2=s.substr(s.size()/2+s.size()%2,s.size()/2); return s1==rev(s2); } int main() { freopen("huiwen.in","r",stdin); freopen("huiwen.out","w",stdout); cin>>n>>m; for (int i=0;i<m.size();++i) if (isalpha(m[i])) m[i]=m[i]-'a'+10;//若为字母,转化为相应数字 else m[i]=m[i]-'0';//转化为相应数字 string a,b; int g; while (cnt++<=30){ a=rev(m); b=""; g=0; for (int i=0;i<m.size();++i){//高精度加法 b+=char((a[i]+m[i]+g)%n); g=(a[i]+m[i]+g)/n; } if (g>0) b+=char(1);//处理进位 m=b; if (hw(b)) {//若回文,输出并结束 for (int i=0;i<b.size();++i) b[i]=toc[b[i]]; cout<<b<<endl<<cnt; return 0; } } cout<<"impossible"; return 0; }
3
11
2015
11
2015