PAT A1019 General Palindromic Number

PAT A1019 General Palindromic Number

在这里插入图片描述

Sample Input 1:

27 2

Sample Output 1:

Yes
1 1 0 1 1

Sample Input 2:

121 5

Sample Output 2:

No
4 4 1
wordmeaning
Palindromic Number回文数
numeral system记数法或数制
standard notation[统计] 标准记数法
  • 思路1:
    用一个数组a[],存储基数为b下每一位的值(不会超过109,故仍用int型)
  • code1:
#include <stdio.h>
using namespace std;
//const int maxn = 100000010;	//!!!:Wrong 1:不需要开这么大,即使基最小为2,开到10也能表示出10^9了
const int maxn = 20;
int a[maxn];
int main(){
	int n, b, idex = 0;
	scanf("%d%d", &n, &b);
	do{
		a[idex++] = n % b;
		n /= b;
	}while(n != 0);	//!!!:Wrong 2: 要使用do_while:n恰好等于0时,a[0]=0; 
	bool flag = true;
	for(int i = 0; i < (idex+1)/2; ++i){
		if(a[i] != a[idex-i-1]){
			//!!!:Wrong 3:idex-1才是最后一位,不是idex 
			flag = false;
			break;
		}
	} 
	if(flag == false) printf("No\n");
	else printf("Yes\n");
	for(int i = idex-1; 0 <= i; --i){
		printf("%d", a[i]);
		if(i != 0) printf(" ");
	}
	return 0;
}
  • TIPS 1:
    int占32位的时候,最大可以赋值为:2147483647。也就是0x7fffffff (0,1111…1111)

  • Wrong:
    第一次写的时候采用的是string存储,通过reverse函数判断是否回文,这样是不行的,因为n在b进制下每位可能>10,即不是一个单char

  • T2 code:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 20;
int ans[maxn];
int Change(int x, int b){
	int idex = 0;
	do{
		ans[idex++] = x % b;
		x /= b;
	}while(x);
	return idex;
}
bool Judge(int len){
	for(int i = 0; i < len; ++i){
		if(ans[i] != ans[len-1-i]) return false;
	}
	return true;
}
int main(){
	int n, b;
	scanf("%d %d", &n, &b);
	int len = Change(n, b);
	if(Judge(len)){
		printf("Yes\n");
	}else printf("No\n");
	for(int i = len - 1; i >= 0; --i){
		printf("%d", ans[i]);
		if(i != 0) printf(" ");
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值