Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
方法1:使用long long回避溢出,最后判断。
class Solution {
public:
int reverse(int x) {
long long res = 0;
while(x){
res = 10 * res + x % 10;
x /= 10;
}
return (res < INT_MIN || res > INT_MAX) ? 0 : res;
}
};
方法2:对溢出的巧妙判断。
class Solution {
public:
int reverse(int x) {
int res = 0;
while(x){
int tmp = 10 * res + x % 10;
if(tmp / 10 != res) //overflow!
return 0;
res = tmp;
x /= 10;
}
return res;
}
};
Determine whether an integer is a palindrome. Do this without extra space.
方法和上面一题类似,但是只要算一半即可,比较前一半和后一半是否相等。
class Solution {
public:
bool isPalindrome(int x) {
if(x<0|| (x!=0 &&x%10==0)) return false;
int sum=0;
while(x>sum)
{
sum *= 10;
sum += x % 10;
x /= 10;
}
return (x==sum)||(x==sum/10);
}
};