题解 | #[NOIP1999]回文数#

[NOIP1999]回文数

https://www.nowcoder.com/practice/a432eb24b3534c27bdd1377869886ebb

#include <iostream>
#include <cmath>
#include <string>
using namespace std;

bool hw(string num){
    for(long long i=0;i<num.length();i++){
        if (num[i]!=num[num.length()-1-i])
        {
            return false;
        }
        
    }
    return true;
}

int changeMto10(string num,int num1){
    long long sum = 0;
    string a = "0123456789ABCDEFG";
    for(int i=0;i<num.length();i++){
        for(int j=0;j<a.length();j++){
            if(num[i]==a[j]){
                sum+= j * pow(num1,num.length()-1-i);
            }
        }
    }

    return sum;
}

string changetoN(int n, int num) {
    string result = "";
    string hexChars = "0123456789ABCDEF"; // 十六进制字符

    if (n == 0) {
        return "0";
    }

    while (n > 0) {
        int remainder = n % num;
        result = hexChars[remainder] + result;
        n /= num;
    }

    return result;
}

string backtobegin(string a){
    string b = a;
    for(int i=0;i<a.length();i++){
        b[i]=a[a.length()-1-i];
    }
    return b;
}

int main() {
    int ans=0;
    int N;
    string M;
    cin>>N>>M;
    //输入进制N,大于等于10时由A,B...表示,N1为N的数字表示,16为G
    
    if (N<2 || (N>10 && N!=16))
    {
        return 0;//确保2<=N<=10或N=16
    }else{
        if(N!=10){
        for(int i=0;i<1000;i++){
            string M1=backtobegin(M);
            long long sum=changeMto10(M,N)+changeMto10(M1,N);
            ans++;
            string strM = changetoN(sum,N);
            if (hw(strM))
            {
                break;
            }else{
                 M = strM;
            }
        }
        }else{
            for(int i=0;i<1000;i++){
            string M1=backtobegin(M);
            long long a = stoll(M)+stoll(M1);
            ans++;
             string strM =to_string(a);
             if (hw(strM))
            {
                break;
            }else{
                 M = strM;
            }
        }
        }
    }
    if(ans<=30){
        cout<<"STEP="<<ans;
    }else{
        cout<<"Impossible!";
    }
    
    
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务