ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-02-18 10:02:33  阅读:243  来源: 互联网

标签:10 洛谷 string P1015 30 int 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;
}

标签:10,洛谷,string,P1015,30,int,NOIP1999,格式,回文
来源: https://www.cnblogs.com/yuzec/p/14410677.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有