题目描述:
思路:
虽然题目本身的意思可能要让我们用字符串来处理,但是我们可以借鉴#7的做法:如果一个正数的逆序和本身相等,它就是回文数;同时由题意,负数肯定不是回文数。注意一下while循环中int溢出的情况(若sum*10溢出int,则它肯定不是回文数)。
class Solution {
public:
bool isPalindrome(int x) {
if (x<0)
return false;
int n = x;
int sum = 0;
while (n)
{
int pop = n % 10;
if(sum > INT_MAX / 10 || (sum == INT_MAX / 10 && pop > 7)) return false; //判断sum*10是否溢出,若溢出,直接返回false
sum *= 10;
sum += n % 10;
n /= 10;
}
if (sum == x)
return true;
else
return false;
}
};
还有一个更偷懒的办法,直接把n和sum定义成long long(因为有一个测试数据是2147483647),也能通过:
class Solution {
public:
bool isPalindrome(int x) {
if (x<0)
return false;
long long int n = x;
long long int sum = 0;
while (n)
{
sum *= 10;
sum += n % 10;
n /= 10;
}
if (sum == x)
return true;
else
return false;
}
};