思路:利用进制转换模板先转化为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;
}

版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~