Determine whether an integer is a palindrome. Do this without extra space.
题目:推断int数据是否为回文数
注意:负数不是回文数,0是最小的回文数
思路:此题和前面一道 求int数的反序差点儿相同http://blog.csdn.net/xiabodan/article/details/46674133
1、第一种解法不须要边界推断,暴力求解。依次比較最后一位与第一位、倒数第二位与第二位……….一直比較N/2次。N为数据x的十进制位数
2、另外一种解法因为须要对数据x取反系,所以要边界检查。当然也能够採用一个long long的数据去存反序数据r
bool isPalindrome(int x) {//解法1/*int n = 0;int tem = x;int i = 0;if(x < 0) return false;while(tem){n++;tem = tem / 10;}int m = n;for(i=0;i<n/2;i++){if(((x/(int)pow(10,i))%10) != (x/(int)pow(10,m-1))%10)return false;m--;}return true;*///解法2 int INT_MAX_DIV10 = INT_MAX / 10;int r = 0;if(x<0) return false;if(x<10) return true;int t = x;int tem = 0;//边界缓存while(x){if(r > INT_MAX_DIV10) return 0;r = r * 10 ;tem = x % 10 ;if(INT_MAX - tem < r) return 0;r = r + tem;x = x/10;}return (r == t);
}