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

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

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

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

#include <stdio.h>
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 <stdio.h>
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);
	}
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值