PAT甲级 1019 General Palindromic Number (20分)

。_饼干妹妹 提交于 2020-02-02 02:41:58

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题的测试点设计比较严密,牛客网不那么严密),可以去网上找其他人的博客,我在我自己的博客里也会总结一些比较坑的点~

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!