题目链接->link
题意描述
给出一个10进制数和一个要求的进制,首先转换为该进制,然后判断转换后的数是否为回文串。
思路
- 10进制转换为其他进制,用除基留余法即可。
- 判断回文串只需判断i位与n-i位是否相同,只要出现一个不同,就不是。特殊情况,单个数字也算回文串,0的回文串就是0。
- 数据范围小于等于10的9次方,即小于等于2的32次方。
代码
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <iostream>
using namespace std;
bool Judge(int con[],int num){//判断回文串
for(int i=0;i<num/2;i++){
if(con[i]!=con[num-1-i]){
return false;
break;
}
}
return true;
}
int main(){
int n,b;
scanf("%d %d",&n,&b);
int con[32],num=0;
do{//进制转换
con[num++]=n%b;
n/=b;
}while(n!=0);
if(Judge(con,num)){
printf("Yes\n");
}
else printf("No\n");
for(int i=num-1;i>=0;i--){
printf("%d",con[i]);
if(i!=0)printf(" ");
}
printf("\n");
return 0;
}