判断整数回文
问题
- 描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 示例:输入: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。
这种方法有效地判断了一个整数是否是回文数。