题目C代码注意点
避免判断32位整型整数溢出的循环判断技巧
场景问题解决方案实现 题目
C代码bool isPalindrome(int x){
int re = 0;
int ro = 0;
if (x < 0 || (x != 0 && x % 10 == 0))
return false;
if (x == 0)
return true;
ro = x;
while (ro > 0) {
if (re == ro || (re == (ro/10)))
return true;
if (re > ro)
break;
re = (re * 10) + (ro % 10);
ro /= 10;
}
return false;
}
注意点
- 负数不可能是回文数;个位上含是0的数不可能是回文数;避免判断32位整型整数溢出的循环判断技巧;
当判断1000000009是否回文数时,如果完整调换各位会得到一个9000000001的数,该数会大于231-1=2147483647,导致溢出情况;
问题那么有什么办法可以避免这种溢出的冲突吗?
解决方案考虑到待判断的数是在-231 ~ 231-1的范围内,所以按十进制的位数判断,最大为10位,那么取一半,最多就是5位;那么一个最大的5位数乘以10是不可能达到溢出的效果的
实现如代码中的if(re>ro) break;的条件满足退出了循环,避免了re会超过6位数的可能;



