Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
思路
检测溢出要在溢出之前,因为溢出的结果是undefined的。
比如要判断加法溢出,想当然的就是 A + B > INT_MAX,但是这是不对的,A + B指不定加出什么东西来,应当是 A > INT_MAX – B.
代码
class Solution {
public:
bool safeMultiply10(int& result){
//Multiply result by 10 if not overflow
//Return false if it overflows
if(result > 0){
if(result > INT_MAX / 10)
return false;
} else if(result < 0) {
if(result < INT_MIN / 10)
return false;
}
result *= 10;
return true;
}
bool safePlus(int& result, int r){
//Return false if it overflows
if(result > 0){
if(result > INT_MAX - r)
return false;
} else if (result < 0) {
if(result < INT_MIN - r)
return false;
}
result += r;
return true;
}
int reverse(int x) {
int result = 0;
//bool negFlag = x<0;
while(x != 0){
int r = x % 10;
if(!safeMultiply10(result))
return 0;
if(!safePlus(result, r))
return 0; //overflow
x /= 10;
}
return result;
}
};