1019 General Palindromic Number (20分)
题目链接:PAT A 1019
题目大意:一个数如果正着读反着读结果都一样,那么这个数就被称为回文数。现在给出一个十进制数n和一个进制b,要求判断n在b进制下是不是回文数。
思路分析:这题很简单,直接求出b进制下的数并转换为字符串,然后调用reverse函数反转与之比较,如果相同就是回文数,否则不是。
坑点:一开始直接用string存储,发现有两个测试点过不去,原因是这道题进制可能比较大,如果是下面这种测试数据:
609468183 236
对应输出应该为:
No
46 86 180 71
而我的输出为:
No
6 4 6 8 0 8 1 1 7
这是因为进制比较大,46应该算一个字符,而我用string存储相当于把他们分开了,所以要改用vector存储,这样就没有问题了。
错误代码:(测试点2,测试点4过不去)
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int n, b;
cin >> n >> b;
string num, temp;
while(n) {
num += to_string(n % b);
n /= b;
}
temp = num;
reverse(temp.begin(), temp.end());
if(temp == num)
cout << "Yes" << endl;
else
cout <<"No" << endl;
for(int i = 0; i < temp.size(); i++) {
cout << temp[i];
if(i != temp.size() - 1)
cout << " ";
}
return 0;
}
AC代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int n, b;
cin >> n >> b;
vector<string> num, temp;
while(n) { //进制转换,因为题目已经强调了n是正数,所以不需要do while循环
num.push_back(to_string(n % b));
n /= b;
}
temp = num;
reverse(temp.begin(), temp.end()); //反转字符串
if(temp == num)
cout << "Yes" << endl;
else
cout <<"No" << endl;
for(int i = 0; i < temp.size(); i++) {
cout << temp[i];
if(i != temp.size() - 1)
cout << " ";
}
return 0;
}
注意:如果大家做题的时候有测试点过不去并且自己想不出原因,可以先去牛客网PAT专题上提交,这个专题里有PAT的部分试题,但是测试点和PAT不一样(PAT题测试点不外泄),是牛客网自己设计的测试点,一般情况下也能发现自己程序的漏洞,如果还不行(PAT题的测试点设计比较严密,牛客网不那么严密),可以去网上找其他人的博客,我在我自己的博客里也会总结一些比较坑的点~
来源:CSDN
作者:sosalt8
链接:https://blog.csdn.net/weixin_43684054/article/details/104133712