如何反转一个整数呢?考虑整数操作的3个技巧:
假设要反转的整数为 x ,反转后的整数存储在变量 rev 中, rev 一开始初始化为 0 ,那么反复执行以下操作:
直到 x 为 0 为止,此时 rev 存储的数据符合题目要求。
问题在于,如何判断插入后的数据是否超出 [INT_MIN,INT_MAX] 的范围,导致溢出?
我们来探索不等式
成立的充分必要条件。
先看右半边,即
。
对于任意整数 i ,我们有
,如对于 123 , 123/10=12 , 123mod10=3 , 123=12*10+3 。
不等式化为:
,带入
,
,
,
移项化简得:
,记
,
所以原不等式右半边成立的充分必要条件是
,即
。同理左半边成立的充分必要条件是
。
原不等式成立的充分必要条件是
。
- // 方法一:数学
- class Solution
- {
- public:
- int reverse(int x)
- {
- int rev = 0;
- while (x)
- {
- if (rev < INT_MIN / 10 || rev > INT_MAX / 10)
- {
- return 0;
- }
-
- // rev 后面续上 x 的最低位
- rev = rev * 10 + x % 10;
- // 去掉 x 的最低位
- x /= 10;
- }
-
- return rev;
- }
- };