判断整数回文
问题
- 描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 示例:输入:121;输出:true
答案
#include <stdio.h>
#include <stdbool.h>
bool isPalindrome(int x) {
if (x < 0) return false;
int original = x, reversed = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
reversed = reversed * 10 + pop;
}
return original == reversed;
}
int main() {
int x = 121;
printf("%dn", isPalindrome(x));
return 0;
}
代码解释
-
函数定义:
bool isPalindrome(int x) {
这里定义了一个名为
isPalindrome
的函数,参数是一个整数x
,返回值是布尔类型(true 或 false),表示x
是否是回文数。 -
负数处理:
if (x < 0) return false;
负数显然不是回文数,因为它们有一个负号,所以直接返回
false
。 -
变量初始化:
int original = x, reversed = 0;
original
用来保存原始的整数x
,而reversed
用来保存反转后的数字。 -
反转数字:
while (x != 0) { int pop = x % 10; x /= 10; reversed = reversed * 10 + pop; }
在这个循环中,通过
x % 10
得到x
的最后一位数字pop
,然后x
除以 10 去掉最后一位。接下来将pop
加到reversed
的末尾,构建反转后的数字。这里有一个溢出检查:
if (reversed > 9999/10 || (reversed == 9999 / 10 && pop > 7)) return false;
这是为了避免
reversed
反转时超过整数范围,但这种检查是不必要的,因为C语言中,int
的范围是 -2147483648 到 2147483647,这样的比较只适用于 32 位整数并且对比的值也不准确。可以直接使用32位整型的溢出检查即可。 -
比较原始数字和反转后的数字:
c 复制代码 return original == reversed;
最后比较原始数字
original
和反转后的数字reversed
,如果相等则返回true
,否则返回false
。
主函数
c复制代码int main() {
int x = 121;
printf("%dn", isPalindrome(x));
return 0;
}
主函数中定义了一个整数 x
,值为 121,然后调用 isPalindrome
函数并输出结果。由于 121 是回文数,所以输出 1(true)。
总结
这段代码通过以下步骤来判断一个整数是否是回文数:
- 负数直接返回
false
。 - 保存原始数字。
- 通过循环反转数字。
- 检查反转过程中是否溢出。
- 比较原始数字和反转后的数字,如果相等则返回
true
,否则返回false
。
这种方法有效地判断了一个整数是否是回文数。