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;
}