题目
从标准输入读入一个整数 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