【题目】
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 }
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄
❄