思路:利用进制转换模板先转化为b进制数。这里注意要用do while型,用while型可能会部分正确。同时,得到转换后的位数i。然后,进行回文判断,只需比较i/2次。只要有一次循环不符合回文条件,就输出“No”,直接退出循环。最后输出b进制数要逆序输出,不是回文的话如果正序输出就会出错。
代码:
#include<cstdio>
int main(){
int n,b;
int n1[100010];
scanf("%d %d",&n,&b);
int i = 0;
//应该改用do while,防止第一次就是0
/*
while(n!=0){
n1[i++] = n%b;
n /= b;
}
*/
do{
n1[i++] = n%b;
n /= b;
}while(n!=0);
for(int j = 0;j <= i/2;j ++){ //这里是j<=i/2
if(n1[j] != n1[i-j-1]){
printf("No\n");
break;
}
if( j == i/2 && n1[j] == n1[i-j-1]){
printf("Yes\n");
}
}
for(int j = i-1;j >= 0;j --){
printf("%d",n1[j]);
if(j != 0) printf(" ");
}
printf("\n");
return 0;
}
版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~