星空's Blog
PAT-A1019 General Palindromic Number

原题

General Palindromic Number (20 分)

题解

这道题顺便检验了我在PAT-A1015 Reversible Primes里关于进制转换的写法在大于十进制情况下的适用性(貌似没写错)。
题目很简单,求某一进制下的回文数
这里与PAT-A1015不同的是大于十进制就不能用char来存储咯,所以这里老老实实地用栈来存储进制转换序列。
题目最后要求输出序列,所以还需要一个队列来记录(不然栈都弹出去了去哪找呀)
要注意的地方是,进制转换可能会产生若干前导0,需要进行处理

代码

#include <iostream>
#include <stack>
#include <queue>
using namespace std;

int main(void) {
    int n,d;
    cin >> n >> d;

    //Zero is written 0 in any base and is also palindromic by definition.
    if (n == 0) {
        cout << "Yes" << endl;
        cout << 0;
    }

    //进制转换 
    stack<int> s;
    while (n > 0) {
        s.push(n % d);
        n = n / d;
    }

    //去除前导0
    while (s.top() == 0) {
        s.pop();
    }

    queue<int> q; //输出序列
    int length = s.size();
    int a[length];
    for (int i = 0;i < length;i++) {
        q.push(s.top());
        a[i] = s.top();
        s.pop();
    }

    int i = 0;
    for (;i < length / 2;i++) {
        if (a[i] != a[length - 1 - i]) {
            break;
        }
    }

    if (i == length / 2) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }

    while (q.empty() == false && q.size() > 1) {
        cout << q.front() << " ";
        q.pop();
    }
    cout << q.front();
    q.pop();

    return 0;  
}
博客所有文章禁止转载。
算法AC代码仅供参考,请不要未经修改直接套用。
首页      算法学习      PAT-A1019 General Palindromic Number
https://secure.gravatar.com/avatar/271861a23dcdde929d3ee8cb8c04f854?s=256&d=monsterid&r=g

星空

文章作者

发表评论

textsms
account_circle
email

星空's Blog

PAT-A1019 General Palindromic Number
原题 General Palindromic Number (20 分) 题解 这道题顺便检验了我在PAT-A1015 Reversible Primes里关于进制转换的写法在大于十进制情况下的适用性(貌似没写错)。 题目很简单,求某一进…
扫描二维码继续阅读
2019-08-15
分类
标签云