PAT_A1019
PAT甲级1019.
目录
A1019
题目
样例
样例1
输入:
27 2
输出:
Yes
1 1 0 1 1
样例2
输入:
121 5
输出:
No
4 4 1
补充样例
输入:
15 16
输出:
Yes
15
思路和坑点
进制转换和判断是不是回文数。进制转换使用除留余数法,回文数的判断使用头尾指针向中间移动的方式判断。
坑点
对于进制大于10的情况,比如15,使用16进制表示是15,属于16进制意义上的单个位数的值,因此属于回文数。(如补充样例所示)考虑到这种情况,存放每一位应该使用int数组而不是字符型数组。
AC代码
#include<bits/stdc++.h>
using namespace std;
int main(void){
#ifdef ONLINE_JUDGE
#else
freopen("1.txt","r",stdin);
#endif
int n,b;
scanf("%d%d",&n,&b);
vector<int> v;
do{ //进制转换
v.push_back(n%b);
n/=b;
}while(n!=0);
int flag=1,i=0,j=v.size()-1;
while(i<j){ //判定回文数
if(v[j]!=v[i]){
flag=0; break;
}
else{
i++;j--;
}
}
if(flag) puts("Yes");
else puts("No");
for(int i=v.size()-1;i>=0;i--){ //输出结果
if(i!=v.size()-1) putchar(' ');
printf("%d",v[i]);
}
return 0;
}