【项目4-回文数】

(1)输入一个正整数,判断其是否为一个回文数(例1221、12321都是回文数,正着看、倒着看,是同一个数)。

[参考解答]

#include <stdio.h>
int main()
{
int n,m,k;
scanf("%d", &n);

k=n;
m=0; //m将为n的反序数
while(k>0)
{
m=m*10+k%10;
k=k/10;
}
if(m==n) //n等于其反序数,则为回文数
printf("Yes\n");
printf("\n");
return 0;
}



(2)输出10000以内的所有回文数。


[参考解答]


解法1:

#include <stdio.h>
int main()
{
int n,m,k;
int count=0;
for(n=1; n<10000; n++)
{
k=n;
m=0; //m将为n的反序数
while(k>0)
{
m=m*10+k%10;
k=k/10;
}
if(m==n) //n等于其反序数,则为回文数
{
printf("%d\t", n);
count++;
if(count%8==0)
printf("\n");
}
}
return 0;
}



解法2:


#include <stdio.h>
int main()
{
int m,n;
//个位数全是回文数
for(m=1; m<=9; ++m)
printf("%d\t", m);
//下面凑出所有两位的回文数
for(m=1; m<=9; ++m)
printf("%d\t", m*10+m);
//下面凑是所有三位的回文数
for(m=1; m<=9; ++m)
for(n=0; n<=9; ++n)
printf("%d\t", m*100+n*10+m);
//下面凑出所有四位的回文数
for(m=10; m<=99; ++m)
{
n=(m%10)*10+m/10; //n和m比,个位、十位恰互换
printf("%d\t", m*100+n);
}
printf("\n");
return 0;
}