回文数是一个经典老题了,这个概念在我小学数学奥赛时就已经接触过了,现在是和编程结合起来,变得更加有意思。(以下来自leetcode第9题)
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
解:
这道题的主体很像leetcode第7题,一样的套路,首先我们先判断是否是个负数,如果是负数,那么直接返回false,因为其绝对不是一个回文数。
此时注意一个点,那就是溢出问题,因为我们不确定x是否是一个回文数,假如它是,那么x倒过来也会在int范围内,假如其不是一个回文数,那么就有可能会溢出,但是我们只需要定义count为long即可,因为int无论如何反过来,都不可能超出long的范围。所以代码如下:
bool isPalindrome(int x) {
long count = 0;
int p = 0;
if (x < 0)
{
return false;
}
while (x)
{
p = x % 10;
x = x / 10;
count = count * 10 + p;
}
if (count == x)
{
return true;
}
else
{
return false;
}
}
that’s all.