首页 > 代码库 > 求4位数字的回文数

求4位数字的回文数

第一种:利用逆序数字是否和原来的数字相等

#include<stdio.h>
int main()
{
	int i,key,sum;//i循环变量1000~9999的数字,key保存i值后求余,sum保存倒叙的数字 
	for(i=1000;i<=9999;++i)
	{
		sum=0;//每次循环都要赋初值为0 
		key=i;//每次循环都要把新的i值给key以便下面while的循环求sum 
		while(key!=0)
		{
			sum=sum*10+key%10;
			key=key/10;
		}
		if(sum==i)
		{
			printf("%d\t",i);
		}
	}
	return 0;
 }

第二种:传统方式分别求出个十百千上的数字再比较个位和千位,十位和百位

#include<stdio.h>
int main()
{
	int a,b,c,d,i;
	for(i=1000;i<10000;++i)
	{
		a=i/1000;//个位
		b=i%1000/100;//十位 
		c=i%100/10;//百位
		d=i%10;//千位
		
		if(a==d&&b==c)
			printf("%d\t",i);
		
	}
	return 0;
}

第三种方式利用求余公式把每位上的数字先保存在数组a中,再比较a[0]和a[3],a[1]和a[2]

与上面有些相似,因为一定是四位数字,所以是a[0]到a[3]即可,此题可以参看以前的笔记
c编程:判断10000以内的正整数哪些是回文数字。 时间是2014年11月17日左右

#include<stdio.h>
int main()
{
	int i,j,key,temp;
	int a[100];

	for(i=1000;i<=9999;++i)
	{
		key=i;
		j=0;
		while(key!=0)
		{
			temp=key%10;
			a[j]=temp;
			j++;
			key=key/10;
		}
		if(a[0]==a[3]&&a[1]==a[2])
		{
			printf("%d\t",i);
		}
	}
	return 0;
 } 
但是不知为什么在蓝桥杯里面提交时老是会说我的程序是错误的。后来才发现是要包输出格式换做输出一个数字就换行,无语了,题目又没说,真心希望蓝桥杯越走越好!

还有一种方法不常用记在这里:

#include <stdio.h>
#include <string.h>

int main()
{
	int i,j;
	int sum = 0;
	char buff[7] = "";
	int len;

	for(i = 1000; i < 10000; i++)
	{
		sprintf(buff,"%d",i);
		len = strlen(buff);
		
		for(j = 0; j < len/2; j++)
			if(buff[j] != buff[len - j - 1]) break;

		if(j == len / 2 )
			printf("%s\n",buff);
	}

	return 0;
}



求4位数字的回文数