75pt求助

P1015 [NOIP1999 普及组] 回文数

woscxk @ 2024-03-10 09:28:58

#include<bits/stdc++.h>
using namespace std;
string _plus(string a,string b,int n){
    int m[1001]={},j[1001]={},c[1001]={};
    string k;
    for(int i=0;i<a.length();i++){
        if(a[i]>='A'&&a[i]<='Z') m[a.length()-i-1]=a[i]-'A'+10;
        else m[a.length()-i-1]=a[i]-'0';
    }
    for(int i=0;i<b.length();i++){
        if(a[i]>='A'&&a[i]<='Z') j[a.length()-i-1]=b[i];
        j[b.length()-i-1]=b[i]-'0';
    }
    int lenc=0,x=0;
    while(lenc<(a.length()>b.length()?a.length():b.length())){
        c[lenc]=m[lenc]+j[lenc]+x;
        x=c[lenc]/n;
        c[lenc]%=n;
        lenc++;
    }
    if(x) c[lenc]=1;
    else lenc--;
    for(int i=lenc;i>=0;i--){
        if(c[i]<10) k+=char('0'+c[i]);
        if(c[i]>=10) k+=char('A'+c[i]-10);
    }
    return k;
}
bool hw(string n){
    for(int i=0;i<n.length()/2;i++){
        if(n[i]!=n[n.length()-i-1]) return false;
    }
    return true;
}
string zhuan(string n){
    string k;
    for(int i=n.length()-1;i>=0;i--){
        k+=n[i];
    }
    return k;
}
int main(){
    int n;
    cin>>n;
    string m;
    cin>>m;
    int cnt=0;
    while(!hw(m)){
        m=_plus(m,zhuan(m),n);
        cnt++;
        if(cnt>30){
            cout<<"Impossible!";
            return 0;
        }
    }
    cout<<"STEP="<<cnt;
    return 0;
}

75分


|