• 洛谷-P1015 [NOIP1999 普及组] 回文数


    洛谷-P1015 [NOIP1999 普及组] 回文数

    原题链接:https://www.luogu.com.cn/problem/P1015


    题目描述

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

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

    又如:对于十进制数 (87)

    STEP1:(87+78=165)
    STEP2:(165+561=726)
    STEP3:(726+627=1353)
    STEP4:(1353+3531=4884)

    在这里的一步是指进行了一次 (N) 进制的加法,上例最少用了 (4) 步得到回文数 (4884)

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

    输入格式

    两行,分别是 (N)(M)

    输出格式

    如果能在 (30) 步以内得到回文数,输出格式形如 STEP=ans,其中 (ans) 为最少得到回文数的步数。

    否则输出 Impossible!

    输入输出样例

    输入 #1

    10
    87
    

    输出 #1

    STEP=4
    

    C++代码

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    int n;
    
    string add(string a) {
        string b = a;
        reverse(b.begin(), b.end());
        int x, y, t = 0, len = a.size();
        for (int i=len-1; i>=0; --i) {
            x = (a[i]>='A')?(a[i]-'A'+10):(a[i]-'0');
            y = (b[i]>='A')?(b[i]-'A'+10):(b[i]-'0');
            x += y + t;
            t = (x>=n)?1:0;
            if (t == 1)
                x -= n;
            a[i] = (x>9)?(x-10+'A'):(x+'0');
        }
        if (t == 1)
            a = "1" + a;
        return a;
    }
    
    bool isPalindrome(string a) {
        string b = a;
        reverse(b.begin(), b.end());
        return a == b;
    }
    
    int main() {
        int i;
        string m;
        cin >> n >> m;
        for (i=0; i<=30&&!isPalindrome(m); ++i)
            m = add(m);
        if (i > 30)
            cout << "Impossible!" << endl;
        else
            cout << "STEP=" << i << endl;
        return 0;
    }
    
  • 相关阅读:
    sprint2第五天任务完成情况
    sprint2第四天任务完成情况
    sprint2第三天任务完成情况
    spark编程基础1
    git基本命令
    自定义bean对象实现序列化接口(Writable)
    HDFS 2.X新特性
    win10-idea连接hdfs集群
    centos6-yum源失效问题
    hadoop-源码编译
  • 原文地址:https://www.cnblogs.com/yuzec/p/14410677.html
Copyright © 2020-2023  润新知