判断回文整数
来源
https://leetcode.com/problems/palindrome-number/
要求
判断一个整数是不是回文数,尽量减少内存暂用。
思路
可能的情况:
- 负数的应当作非回文数
0-9
是回文数- 判断时可能会溢出
从 >9
的数开始判断,先计算出整数有多少位,这其中要处理出现溢出的情况,例如整数 x = 34043
,计算出位数 len = 5
;
以此判断最高位和最低位是否相同,若相同 令 x = 404
,继续判断。
实现代码
bool isPalindrome(int x) {
static const int MAX_INT = (int) ((unsigned)~0 >> 1);
if(0 > x){
return false;
}
int len = 1, decimal = 1;
while(x >= decimal*10){ // 计算整数有多少位
decimal *= 10;
++len;
if(MAX_INT / decimal < 10)
{
++len;
break;
}
}
if(len == 1){
return true;
}
else{
int low = 1;
while(len-- > low++){
if(x / decimal == x % 10){
x = (x % decimal - x % 10) / 10;
decimal /= 100;
}
else{
return false;
}
}
return true;
}
}