题目描述
判断一个整数是否是回文数。(进阶:你能不将整数转为字符串来解决这个问题吗?)
解题思路
常规思路是将整数转换成字符串(to_string()
),然后就很容易了。下面只考虑进阶解法:
- 数学法:
- 对于数字的末位,直接取余就可以了,对于数字的首位,我们可以这么算。
- 首先用一个变量记录数字的最高位,比如 12321,可以标记
help
为 10000。(关键) - 第一个末位为 1,第一个首位为
12321/10000=1
,接下来我们需要计算 232 是否为回文,怎么计算呢? - 我们需要去掉首位和末位:可以采用
x % help / 10
的方式,12321%10000==2321
可以将最高位去掉,然后2321/10==232
可以将最低为去掉。 - 最后不要忘记将
help/100
。 - 注:此方法对于10201这种特殊的回文数字也是可以通过的,不需要特殊处理。
参考代码
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0)
return false;
int tmp = x;
int help = 1;
while(tmp >= 10){
help *= 10;
tmp /= 10;
}
while(x){ // 这里用 while(help) 也行
if(x / help != x % 10)
return false;
x = x % help / 10; // 注意:x = x / 10 % 10 这样不行!!! eg: 11
help /= 100;
}
return true;
}
};