一.题目
给你一个整数 x
,如果 x
是一个回文整数,返回 true
;否则,返回 false
。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 例如,
121
是回文,而123
不是。
示例 1:
输入:x = 121 输出:true
示例 2:
输入:x = -121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10 输出:false 解释:从右向左读, 为 01 。因此它不是一个回文数
二.代码
bool isPalindrome(int x)
{
int a=0;
int b=x;
if(b<0)
return false;
while(b!=0)
{
a=a*10+b%10;
b=b/10;
}
if(a==x)
return true;
else
return false;
}
三.代码解读
1.循环逻辑
a = a * 10 + b % 10;
:b % 10
操作会获取b
的个位数。- 然后将
a
现有的值乘以 10(相当于将之前得到的各位数字依次向左移动一位,腾出个位来存放新获取的数字),再加上新获取的个位数(b % 10
的结果),这样就逐步将b
的每一位数字按照倒序的方式累加到a
中了。例如,最初a = 0
,若b = 123
,第一次循环时,a
会变为 3(0 * 10 + 3
),第二次循环时,b
变为 12,a
会变为 32(3 * 10 + 2
),第三次循环时,b
变为 1,a
会变为 321(32 * 10 + 1
)。
b = b / 10;
:
这一步是将b
的值进行更新,通过整除 10 操作,去掉已经处理过的个位数,使b
的下一位数字(原来的十位数)成为新的个位数,以便在下一次循环中继续提取并处理。例如,b
原本为 123,经过b = b / 10
操作后,b
就变为 12,方便后续继续提取数字并构建倒序的数。
四.补全代码
#include <stdio.h>
#include <stdbool.h>
// 判断一个整数是否为回文数的函数
bool isPalindrome(int x)
{
int a = 0;
int b = x;
if (b < 0)
return false;
while (b!= 0)
{
a = a * 10 + b % 10;
b = b / 10;
}
if (a == x)
return true;
else
return false;
}
int main()
{
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
bool result = isPalindrome(num);
if (result)
{
printf("%d 是回文数。\n", num);
}
else
{
printf("%d 不是回文数。\n", num);
}
return 0;
}