题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
程序分析:此题要求判断一个五位数是不是回文数,首先要理解回文数的定义,然后我们就要思考如何处理我们输入的五位数。
方法一:最简单的思路,根据回文数的定义,我们就把这个五位数分解,求出它的万位,千位,百位,十位,个位。然后我们只需要比较,看分解出的万位与个位,千位与十位是否相等,若相等则为回文数。代码如下:
#include <stdio.h>
int main()
{
long a, b, c, d, x;
printf("请输入 5 位数字:");
scanf("%ld", &x);
a = x / 10000; //分解出万位
b = x % 10000 / 1000; //分解出千位
c = x % 100 / 10; //分解出十位
d = x % 10; //分解出个位
//判断个位等于万位并且十位等于千位
if (a == d && b == c) {
printf("这是回文数\n");
}
else {
printf("这不是回文数\n");
}
}
程序运行结果如下:12321是回文数,12345不是回文数。
方法二:第二种思路就是我们利用字符串,将这5位数作为字符串输入到一个字符数组中,利用数组下标找到各个数字进行比较,判断是否为回文数字。代码如下:
#include <stdio.h>
#include<string.h>
int main()
{
char str[5];
printf("请输入五位数:");
scanf("%s", str);
if (str[0] == str[4] && str[1] == str[3])
printf("这是一个回文数。\n");
else
printf("这不是回文数。\n");
return 0;
}
程序运行,同样可以得到方法一的结果。
方法三:提供最后一种思路,就是将这一串数逆序排列,将得到的逆序排列数与原数进行比较,判断是否为回文数字。代码如下:
#include <stdio.h>
int main()
{
int x;
int sum = 0;
printf("请输入一个整数:\n");
scanf("%d", &x);
for (int i = x; i > 0; i /= 10)
//sum最终为逆序后各个位相加的结果
sum = sum * 10 + i % 10;
//若该数是回文数字,说明该数逆序后还是这个数本身
// 所以这里直接判断sum与原数是否相等
if (sum == x)
printf("%d 是回文数\n", x);
else
printf("%d 不是回文数\n", x);
}
同样运行程序,我们可以得到想要的结果,但这个思路不好想,主要是前面两个方法,是最清晰,最应该想到的思路。