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; } };