最近更新于 2024-05-05 14:18
题目
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
1.负数不是回文数,直接排除。
2.零是回文数,直接确定。
3.在不是 0 的情况下,以 0 结尾的数不是回文数,如 1230 倒序后为 321,就是判断是否能被 10 整除。
4.在排除前面的情况后,就是将原数与倒序后的数比较,相等就是回文数。现在的关键点就在倒序上,可以将数字转为字符串,然后倒序;也可以直接基于数字处理进行倒序。
代码
- 数字处理
bool isPalindrome(int x)
{
if (x < 0)
{
return false;
}
else if (x == 0)
{
return true;
}
else if (x % 10 == 0)
{
return false;
}
unsigned int reverse = 0;
int src = x;
while (x)
{
reverse *= 10;
reverse += (x % 10);
x /= 10;
}
if (reverse == src)
{
return true;
}
return false;
}

- 字符串处理
#include <stdio.h>
#include <string.h>
bool isPalindrome(int x)
{
if (x < 0)
{
return false;
}
else if (x == 0)
{
return true;
}
else if (x % 10 == 0)
{
return false;
}
static char src[11], reverse[11];
memset(src, '\0', sizeof(src));
memset(reverse, '\0', sizeof(reverse));
sprintf(src, "%d", x);
for (int i = 9, j = 0; i >= 0; --i)
{
if (src[i] == '\0')
{
continue;
}
reverse[j] = src[i];
++j;
}
if (strcmp(src, reverse) == 0)
{
return true;
}
return false;
}

回文数
