题解 100% AC
2025-08-25 20:46:42
发布于:江苏
5阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int a[10010],b[10010],c[10010];
bool is_pal(string s){
for(int l=0,r=s.size()-1;l<r;l++,r--)if(s[l]!=s[r])return 0;
return 1;
}
int to_val(char x){
if(isdigit(x))return x-'0';
return toupper(x)-'A'+10;
}
char to_char(int x){
if(x<10)return x+'0';
return x+'A'-10;
}
string add(string as,string bs,int k){
memset(a,0,sizeof(a)),memset(b,0,sizeof(b)),memset(c,0,sizeof(c));
reverse(as.begin(),as.end()),reverse(bs.begin(),bs.end());
a[0]=as.size(),b[0]=bs.size(),c[0]=max(a[0],b[0]);
for(int i=0;i<a[0];i++)a[i+1]=to_val(as[i]);
for(int i=0;i<b[0];i++)b[i+1]=to_val(bs[i]);
for(int i=1;i<=c[0];i++){
c[i+1]=(a[i]+b[i]+c[i])/k;
c[i]=(a[i]+b[i]+c[i])%k;
}
if(c[c[0]+1]>0)c[0]++;
while(c[c[0]]==0&&c[0]>1)c[0]--;
string ans;
for(int i=c[0];i>=1;i--)ans+=to_char(c[i]);
return ans;
}
int main(){
int k;
string as,bs;
cin>>k>>as;
for(int step=0;step<=30;step++){
if(is_pal(as)){
cout<<"STEP="<<step;
return 0;
}
bs=as;
reverse(bs.begin(),bs.end());
as=add(as,bs,k);
}
cout<<"Impossible!";
return 0;
}
这里空空如也
有帮助,赞一个