首页 > 编程笔记 > C语言笔记

C语言求回文数的程序(有代码有解析)

回文数是一个有趣的数学概念,它指的是一个数字从左往右读和从右往左读都是相同的。例如,121、1221、45654 都是回文数。
 

要判断一个数是否为回文数,我们需要将这个数字反转,然后与原数进行比较。如果反转后的数字与原数相等,那么这个数就是回文数。这个过程涉及到数字的拆分、重组和比较操作。


在C语言中,我们可以通过以下步骤来实现判断回文数的功能:

  1. 接收用户输入的数字。
  2. 将输入的数字保存在一个变量中,我们称之为原始数。
  3. 创建一个新的变量来存储反转后的数字,初始值为 0。
  4. 使用一个循环来逐位提取原始数的每一位数字。在每次循环中,我们将反转数乘以 10(相当于左移一位),然后加上原始数的最后一位。同时,将原始数除以 10,去掉已经处理过的最后一位。
  5. 当原始数变为 0 时,循环结束,此时反转数就是原始数的反转结果。
  6. 比较反转后的数字与原始数是否相等。如果相等,则该数是回文数;否则,不是回文数。


下面是实现这个逻辑的C语言代码:

#include <stdio.h>

int main() {
    int num, originalNum, reversedNum = 0, remainder;

    printf("请输入一个整数: ");
    scanf("%d", &num);

    originalNum = num;  // 保存原始数

    // 反转数字
    while (num != 0) {
        remainder = num % 10;  // 获取最后一位
        reversedNum = reversedNum * 10 + remainder;  // 构建反转数
        num /= 10;  // 去掉最后一位
    }

    // 判断是否为回文数
    if (originalNum == reversedNum)
        printf("%d 是回文数。\n", originalNum);
    else
        printf("%d 不是回文数。\n", originalNum);

    return 0;
}

这段代码首先提示用户输入一个整数,然后使用 scanf 函数读取输入。接着,我们将输入的数字保存在 originalNum 变量中,以便后续比较使用。
 

核心的反转逻辑在 while 循环中实现。每次循环,我们通过取模操作% 10获取 num 的最后一位,然后将这一位添加到 reversedNum 中。reversedNum * 10的操作相当于将已有的数字左移一位,为新的数字腾出个位。num /= 10的操作则去掉了 num 的最后一位,为下一次循环做准备。
 

循环结束后,我们得到了完全反转的数字。最后,我们比较 originalNum 和 reversedNum。如果它们相等,说明这个数是回文数;否则,不是回文数。
 

让我们看一个具体的例子,假设用户输入的数字是 12321:

输入:12321
第一次循环:num = 1232, remainder = 1, reversedNum = 1
第二次循环:num = 123,  remainder = 2, reversedNum = 12
第三次循环:num = 12,   remainder = 3, reversedNum = 123
第四次循环:num = 1,    remainder = 2, reversedNum = 1232
第五次循环:num = 0,    remainder = 1, reversedNum = 12321
循环结束,originalNum (12321) == reversedNum (12321)

这个程序的输出结果将会是:

请输入一个整数: 12321
12321 是回文数。

通过这个C语言程序,我们不仅实现了判断回文数的功能,还练习了数字的基本操作,如取模、整除、循环等。这种思路不仅适用于判断回文数,还可以用于其他需要反转数字或者提取数字各位的问题中。

相关文章