题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
程序分析:此题要求判断一个五位数是不是回文数,首先要理解回文数的定义,然后我们就要思考如何处理我们输入的五位数。
方法一:最简单的思路,根据回文数的定义,我们就把这个五位数分解,求出它的万位,千位,百位,十位,个位。然后我们只需要比较,看分解出的万位与个位,千位与十位是否相等,若相等则为回文数。代码如下:
#includeint 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#include 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; }
程序运行,同样可以得到方法一的结果。
方法三:提供最后一种思路,就是将这一串数逆序排列,将得到的逆序排列数与原数进行比较,判断是否为回文数字。代码如下:
#includeint 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); }
同样运行程序,我们可以得到想要的结果,但这个思路不好想,主要是前面两个方法,是最清晰,最应该想到的思路。



