#include<iostream>
#include<cmath>
using namespace std;
int arr[40]={0};//40是根据n的最大值b的最小值算的一个需要的上界
int main(){
int n,b;
scanf("%d%d",&n,&b);
//int cnt=1;
/* while(pow(b,cnt)<n) cnt++;
int a[cnt];
for(int i=cnt-1;i>=0;i--){
int temp=n/pow(b,i);
a[cnt-1-i]=temp;
n=n-temp*pow(b,i);
}
int flag=0;
for(int i=0;i<cnt/2;i++){
if(a[i]!=a[cnt-1-i]){
flag=1;
}
}
if(flag==1){
printf("No\n");
printf("%d",a[0]);
for(int i=1;i<cnt;i++){
printf(" %d",a[i]);
}
}
else {
printf("Yes\n");
printf("%d",a[0]);
for(int i=1;i<cnt;i++){
printf(" %d",a[i]);
}
}*/
int a=n,cnt=0;
while(a!=0){
arr[cnt++]=a%b;
a=a/b;
}
int flag=0;
for(int i=0;i<cnt/2;i++){
if(arr[i]!=arr[cnt-1-i]){
flag=1;
}
}
if(flag==0){
printf("Yes\n");
printf("%d",arr[cnt-1]);
for(int i=cnt-2;i>=0;i--){
printf(" %d",arr[i]);
}
}
else{
printf("No\n");
printf("%d",arr[cnt-1]);
for(int i=cnt-2;i>=0;i--){
printf(" %d",arr[i]);
}
}
if(cnt==0) printf("0");
return 0;
}
总结
1.进制转化,我一开始用的方法虽然正确但是比较复杂 学习一下 别人更简单的方法,与短除法原理相同
2.注意cnt 是数组容量大小
3.注意如果是0,要输出yes和0,虽然我看着题干上好像说的是正十进制
4.数组中正序倒序无所谓,大不了倒序输出呗
英语
问题 无