【题解】P1015 回文数
题面
前言
好无聊的高精度
正文
需要维护两个操作
-
高精度加法
-
倒转字符串(判断回文、和加法操作都需要捏!)
代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=110;
char sixt[20]="0123456789ABCDEF";
int n;
string m;
inline bool check(string a){
string s=a;
reverse(s.begin(),s.end());
return s==a;
}
string add(int k,string b){
string a=b;
reverse(a.begin(),a.end());
int numa[maxn]={},numb[maxn]={},numc[maxn]={};
int len=a.length(),lenc=1;
string ans;
for(int i=0;i<len;i++){
if(isdigit(a[i])){
numa[len-i]=a[i]-'0';
}else{
numa[len-i]=a[i]-'A'+10;
}
if(isdigit(b[i])){
numb[len-i]=b[i]-'0';
}else{
numb[len-i]=b[i]-'A'+10;
}
}
int x=0;
while(lenc<=len){
numc[lenc]=numa[lenc]+numb[lenc]+x;
x=numc[lenc]/k;
numc[lenc]%=k;
lenc++;
}
numc[lenc]=x;
while(numc[lenc]==0){
lenc--;
}
for(int i=lenc;i>=1;i--){
ans+=sixt[numc[i]];
}
return ans;
}
int main(){
cin>>n>>m;
for(int i=0;i<=30;i++){
if(check(m)){
cout<<"STEP="<<i<<endl;
return 0;
}else{
m=add(n,m);
}
}
cout<<"Impossible!"<<endl;
return 0;
}
后记
又双叒叕水过一篇题解!
完结撒花!