判断一个数在某个进制转换下是不是回文数

为了判断一个数在某个进制转换之下是否为回文数,先要理解怎样才算回文数!
首先,“回文"是指一句话正着读与反着读都是一样的比如"我为人人,人人为我”.因此,回文数就是 指任一自然数,如果这个自然数的各位数字反向排列所得的数字与原来相等,那么这个自然数就是回文数.比如121,1234321等.
一定要注意,偶数个的数字也有回文数,比如124421,但小数是没有回文数的!
在有了回文数的概念之后,我们思考如何在程序中实现这个目的.
先来看一个for 语句

	int i,n;	//n为任一自然数
	for (i = n; i; i /= 10){
		printf("%d\n",i%10);	//其中i % 10完成了对n的每一位的遍历
	}

先抛开如上的问题,我们考虑,如何判断一个数是不是回文数,程序如下:

#include 
int main(){
	int i,n;
	printf("请输入一个整数: \n");
	scanf("%d",&n);
	for (i = n; i; i /= 10){
		tmp = i % 10;
		sum = sum * 10 + tmp;
	}
	if (sum == n){
		printf("%d是回文数\n",n)	
	}
	else {
		printf("%d不是回文数\n",n)
	}
}

因为我们通常最常用的就是10进制数,所以如上的程序也就是判断一个十进制的自然数是不是回文数.接下来回到最开始的问题,这下子原来的问题就变得简单多了,还是上面提到的for语句,改成如下这样

int i,n;	//n为任一自然数
int sn;	//定义一个整型sn,表示进制情况 	
for (i = n; i; i /= sn){
	printf("%d\n",i%sn);	
}

这样一来,其中的i % sn完成了对n在sn进制下的每一位的遍历.
相应的程序如下:

#include 
int main(){
	int n,sn;
	int i;
	int sum = 0;
	int tmp;
	printf("请输入n和sn: \n");
	scanf("%d %d",&n,&sn);
	for (i = n; i; i /= sn){
		tmp = i % sn;
		sum = sum*sn+tmp ;
	}
	if (sum == n){
		printf("%d在%d进制下是回文数\n",n,sn);
	}
	else {
		printf("%d在%d进制下不是回文数\n",n,sn);
	}
}

你可能感兴趣的:(回文数,进制转换)