3
11
2015
0

COGS 40 [NOIP1999] 回文数

#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;
}
Category: 题解 | Tags: NOIP COGS 模拟 高精度 | Read Count: 242

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com