【PAT甲级题解记录】1019 General Palindromic Number (20 分)
前言
Problem:1019 General Palindromic Number (20 分)
Tags:进制转换 回文串判断
Difficulty:剧情模式
想流点汗想流点血死而无憾
问题描述
给定一个正整数N,求其作为b进制数时是否为回文数。
解题思路
- 进制转化完后存储下来,半个循环对比左右数值即可。( N N N is palindromic if and only if a i = a k − i a_i=a_k−i ai=ak−i for all i i i. 其中 k k k是数组长度)
- 转换后的b进制数可用一个数组来表示。
参考代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int N, b; // 1e9
void init() {
cin >> N >> b;
}
vector<int> Decimal_to(int n, int base) {
vector<int> ans;
if(n==0){
ans.push_back(0);
return ans;
}
while (n) {
ans.push_back(n % base);
n /= base;
}
reverse(ans.begin(), ans.end()); // 其实要判断是否回文,是否反转不影响,但这里将其当成一个单纯的通用型函数
return ans;
}
void printNum(const vector<int> &v) {
for (int i = 0; i < int(v.size()); ++i) {
cout << (i > 0 ? " " : "") <<v[i];
}
cout<<endl;
}
void solution_1019() {
init();
vector<int> ans = Decimal_to(N, b);
for (int i = 0; i < int(ans.size()) / 2 + 1; ++i) {
if (ans[i] != ans[int(ans.size()) - 1 - i]) {
cout << "No" << endl;
printNum(ans);
return;
}
}
cout << "Yes" << endl;
printNum(ans);
}
int main() {
solution_1019();
return 0;
}