首页 > 代码库 > LeetCode 7. Reverse Integer 关于溢出很好的理解和处理
LeetCode 7. Reverse Integer 关于溢出很好的理解和处理
上界2147483647, 下界-2147483648. 反过来看7463847412 -> 2147483647, -8463847412 -> -2147483648
为使反转不越界,那么绝对值大于10^9的参数x的前9位应满足<=463847412. 我们没有考虑最高位,是因为最高位一定<=2, 从而<=7或8
所以反转前先检查是否将溢出,溢出时返回-1; 反之开始反转。
代码:
class Solution { public: int reverse(int x) { if( overflow(x) == true) { return -1; } int ret = 0; while (x!=0) { ret = 10*ret + x%10; x /= 10; } return ret; } private: bool overflow(int x) { if (x / 1000000000 == 0) // x的绝对值小于1000000000, 不越界 { return false; } else if (x == INT_MIN) // INT_MIN反转后越界,也没法按下述方法取绝对值(需要特判),直接返回true { return true; } x = abs(x); // x = d463847412 -> 2147483647. (参数x,本身没有越界,所以d肯定是1或2) // or -d463847412 -> -2147483648. for (int cmp = 463847412; cmp != 0; cmp/=10, x/=10) { if ( x%10 > cmp%10 ) { return true; } else if (x%10 < cmp%10) { return false; } } return false; } };
LeetCode 7. Reverse Integer 关于溢出很好的理解和处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。