P1015 [NOIP1999 普及组] 回文数 [模拟 / 高精]
Posted 幽殇默
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1015 [NOIP1999 普及组] 回文数 [模拟 / 高精]相关的知识,希望对你有一定的参考价值。
https://www.luogu.com.cn/problem/P1015
用long long 可以卡过,不过本题考察的是高精
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int n;
string m;
unsigned long long D(string x)//转换成10进制
{
unsigned long long int sum=0;
for(int i=0;i<x.size();i++)
{
if(x[i]>='A') sum=sum*n+x[i]-'A'+10;
else sum=sum*n+x[i]-'0';
}
return sum;
}
string to_n(unsigned long long int x)//转换成n进制
{
string ans;
while(x)
{
int temp=x%n;
char c;
if( temp <=9 ) c=temp+'0',ans+=c;
else c=temp+'A'-10,ans+=c;
x/=n;
}
reverse(ans.begin(),ans.end());
return ans;
}
bool judge(string m)//判断
{
int temp=m.size();
for(int i=0;i<temp/2;i++) if(m[i]!=m[temp-1-i]) return false;
return true;
}
int main(void)
{
cin>>n>>m;
int ans=1;
bool flag=false;
while(1)
{
unsigned long long int a=D(m);
reverse(m.begin(),m.end());
unsigned long long int b=D(m);
m=to_n(a+b);
if(judge(m)) flag=true;
if(flag) break;
ans++;
if(ans>=30) break;
}
if(flag) cout<<"STEP="<<ans<<endl;
else cout<<"Impossible!"<<endl;
return 0;
}
以上是关于P1015 [NOIP1999 普及组] 回文数 [模拟 / 高精]的主要内容,如果未能解决你的问题,请参考以下文章