【题目】
https://pintia.cn/problem-sets/994805342720868352/problems/994805487143337984
题目大意:给定一个N和b,求N在b进制下,是否是一个回文数(Palindromic number)。其中,0<N, b<=10 ^ 9
【思路】
将n转为b进制下的数字,存储到vector<int>中,判断数组两端元素是否全部相等即可。可以倒序存储,不影响回文数的判断。
int最大约为2.14 * 10 ^ 9,不必担心int越界。
【坑】
b进制下的数字可能大于10,不能用字符串存储。用字符的话,数字+'0'可能会超出ascii表示的范围,测试点4过不了。
【代码】
1 #include<iostream>
2 #include<vector>
3 using namespace std;
4 int main()
5 {
6 int num, base;
7 cin >> num >> base;
8 vector<int>output;
9 while (num)
10 {
11 output.push_back(num % base);
12 num = num / base;
13 }
14 bool pal = true;
15 for (int i = 0; i < output.size()/2; i++)
16 {
17 if (output[i] != output[output.size() - i - 1])
18 {
19 pal = false;
20 break;
21 }
22 }
23 if (pal) cout << "Yes" << endl;
24 else cout << "No" << endl;
25 for (int i = output.size() - 1; i >= 0; i--)
26 {
27 cout << output[i];
28 if (i > 0)cout << " ";
29 }
30 return 0;
31 }
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
来源:https://www.cnblogs.com/yue36/p/12318737.html