第一种:利用逆序数字是否和原来的数字相等
#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/100%10;//百位
c=i/10%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;
}