• 高精度练习- P1015 回文数


    题目描述

    若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。

    例如:给定一个十进制数5656,将5656加6565(即把5656从右向左读),得到121121是一个回文数。

    又如:对于十进制数8787:

    STEP1:8787+7878 = 165165
    STEP2:165165+561561 = 726726
    STEP3:726726+627627 = 13531353
    STEP4:13531353+35313531 = 48844884

    在这里的一步是指进行了一次NN进制的加法,上例最少用了44步得到回文数48844884。

    写一个程序,给定一个NN(2 le N le 10,N=162N10,N=16)进制数MM(100100位之内),求最少经过几步可以得到回文数。如果在3030步以内(包含3030步)不可能得到回文数,则输出Impossible!

    输入输出格式

    输入格式:

    两行,分别是NN,MM。

    输出格式:

    STEP=ans

    输入输出样例

    输入样例#1: 复制
    10
    87
    
    输出样例#1: 复制
    STEP=4


    #include <iostream>
    #include <algorithm>
    #include <cctype>
    #include <string>
    using namespace std;
    string add(string s1,string s2,int N){
        string ans;
        int len1 = s1.length() - 1;
        int len2 = s2.length();
        int len2s = 0;
        int s = 0;
        int re = 0;
        while(len1 >=0 || len2s < len2){
            s = re;
            if(len1>=0) s+= s1[len1--] -'0';
            if(len2>=0) s+= s2[len2s++] -'0';
            re = s/N;
            s = s%N;
            ans.push_back(s+'0');
        }
        if(re)    ans.push_back(re+'0');
        std::reverse(ans.begin(),ans.end());
        return ans;
    }
    bool huiwen(string s){
        for(int i = 0,j = s.length()-1;i<j;++i,--j){
            if(s[i] != s[j])
                return false;
        }
        return true;
    }
    int main(){
        int N;
        string s2;
        cin >> N >> s2;
        int step = 0;
        if(N==16){//处理16进制 
            for(int i=0;i<s2.length();++i){
                if(isalpha(s2[i])){
                    s2[i] = s2[i] - 'A' + 10 + '0'; 
                }
            }
        }
        if(huiwen(s2)){
            cout << "STEP=" << step << endl;
            return 0;
        }
        while(step < 30){
            ++step;
            s2 = add(s2,s2,N);
            if(huiwen(s2)){
                cout << "STEP=" << step << endl;
                return 0;
            }
        }
        cout << "Impossible!" << endl;
        return 0;
    }
  • 相关阅读:
    泛型
    多播委托
    匿名方法
    委托
    正则表达式
    压缩和解压,文件读取练习
    Vue样式绑定
    Vue跑马灯
    Vue中的v-for遍历循环
    Vue框架
  • 原文地址:https://www.cnblogs.com/--zz/p/10645291.html
Copyright © 2020-2023  润新知