题解 | #[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!";
    }
    
    
}

全部评论

相关推荐

来个厂收我吧:首先,市场侧求职我不是很懂。 但是,如果hr把这份简历给我,我会觉得求职人不适合做产品经理。 问题点: 1,简历的字体格式不统一,排版不尽如人意 2,重点不突出,建议参考star法则写个人经历 3,印尼官方货币名称为印度尼西亚卢比(IDR),且GMV690000印尼盾换算为305人民币,总成交额不高。 4,右上角的意向职位在发给其他公司时记得删除。 5,你所有的经历都是新媒体运营,但是你要投市场营销岗位,jd和简历不匹配,建议用AI+提示词,参照多个jd改一下经历内容。 修改建议: 1,统一字体(中文:思源黑体或微软雅黑,英文数字:time new romans),在word中通过表格进行排版(b站学) 2,校招个人经历权重:实习经历=创业经历(大创另算)>项目经历>实训经历>校园经历 3,请将项目经历时间顺序改为倒序,最新的放最上方。 4,求职方向不同,简历文字描述侧重点也需要不同。
点赞 评论 收藏
分享
人间雪:简历最好只要一页,除非你牛逼到一页都写不下了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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