如果有一个正整数从左、右来读都是一样的,则称为回文式数(简称回数);比如101,32123,
999都是回数。求10000以内的所有回数。
第一种方式看它的逆序数字是否和原来的数字相等
判断的思路就是,通过循环依次把m的个位,十位,百位...上的数取出来,与sum*10相加。这样得到的数sum就是m颠倒之后的数,如果两者相等,那就是回文数。
while(a)
{
sum=sum*10+a%10;
a=a/10;
}
程序如下:
//如果有一个正整数从左、右来读都是一样的,则称为回文式数(简称回数);比如101,32123,
//999都是回数。求10000以内的所有回数
#include<stdio.h>
int main()
{
int i;//循环变量
int count=0;//循环计数
int sum;
int a;
for(i=1;i<10000;++i)
{
a=i;
sum=0;
while(a)
{
sum=sum*10+a%10;
a=a/10;
}
if(sum==i)
{
printf("%8d",i);
count++;
if(count%5==0)
printf("\n");
}
}
printf("\n");
return 0;
}
第二种方式:判断第一位和最后一位,第二位和倒数第二位。。。
#include<stdio.h>
int main()
{
for(int i=1;i<10000;i++)//循环10000以内的数字
{
char str[6];//字符数组存储数字的各位数(逆序存储的)
int temp=i;
int t=0;
int flag=1;
while(temp)
{
str[t]=temp%10;//求个位上的数字并保存在数组str中
temp/=10;//去掉个位上的数字
t++;
}
for(int j=0;j<t;j++)
{
if(str[j]!=str[t-j-1])//判断第一位和最后一位,第二和倒数第二位...
{
flag=0;
break;
}
}
if(flag)
printf("%d\t",i);
}
printf("\n");
}