反转一半的数字,将x
的末尾数字摘下来放到reverse
的末尾,摘掉一半数字的条件是x>reverse
。
但是此方法有一个缺陷:当reverse
为个位数,x
为0时,x==reverse/10
,会判断为真。可是诸如10或者200之类的数显然不是回文数。好在可以事先用x%10==0 && x!=0
过滤掉。
bool isPalindrome(int x) {
//考虑特殊条件
if(x<0 || (x%10==0 && x!=0))
return false;
int reverse=0;
while(x>reverse){
reverse=reverse*10+x%10;
x/=10;
}
//当x是偶数长度或奇数长度
return x==reverse || x==reverse/10;
}