题目

从标准输入读入一个整数 n,判断其是否为回文整数(即正反读完全一致的数字)。

输入格式:一行输入一个整数 n。

输出格式:若为回文数输出 yes,否则输出 no,末尾换行。

数据范围与约定:-2×109 ≤ n ≤ 2×109。

思路与算法

1. 负数判定
负数带负号,如 -121 反转后为 121-,故所有负数必然不是回文数。

2. 反转整数对比
拷贝原数 t = n,利用 rev = rev * 10 + t % 10; t /= 10; 构造完整反转数值,最后比较 rev == n。注意反转过程建议使用 long long 防止溢出。

完整程序

#include <stdio.h>

int main(void)
{
    int n;
    if (scanf("%d", &n) != 1 || n < 0) {
        return 1;
    }

    int orig = n, rev = 0;

    // 将整数各个数位反向拼接构造 rev:原数最低位变成最高位
    while (n) {
        rev = rev * 10 + n % 10;
        n /= 10;
    }

    // 若反转后的数与原数相同,则为回文数
    printf("%s\n", rev == orig ? "yes" : "no");
    return 0;
}

运行示例

输入:

12321

输出:

yes

其它写法

下面每种写法都是完整程序,输入输出格式与正文一致,便于对照。

反转整数再比较

程序:

#include <stdio.h>

int main(void)
{
    int n;
    if (scanf("%d", &n) != 1 || n < 0) {
        return 1;
    }
    int orig = n, rev = 0;
    while (n) {
        rev = rev * 10 + n % 10;
        n /= 10;
    }
    printf("%s\n", rev == orig ? "yes" : "no");
    return 0;
}

输入:

12321

输出:

yes