咸阳专业学校网站建设,社区营销,北京比较好的it公司,用来做微网站的整数反转原题地址
方法一#xff1a;数学
反转整数
如何反转一个整数呢#xff1f;考虑整数操作的3个技巧#xff1a;
xmod10 可以取出 x 的最低位#xff0c;如 x123 #xff0c; xmod103 。x/10 可以去掉 x 的最低位#xff0c;如 x123 #xff0c; x/10 #xf…整数反转原题地址
方法一数学
反转整数
如何反转一个整数呢考虑整数操作的3个技巧
xmod10 可以取出 x 的最低位如 x123 xmod103 。x/10 可以去掉 x 的最低位如 x123 x/10 x12 。xx*10y 可以在 x 后面续上 y 其中 y 是一位数如 x123 y4 xx*10y x1234 。
假设要反转的整数为 x 反转后的整数存储在变量 rev 中 rev 一开始初始化为 0 那么反复执行以下操作
digitxmod10 取出 x 的最低位数。x/10 去掉 x 的最低位数。revrev*10digit 在 rev 后面续上 digit 。
直到 x 为 0 为止此时 rev 存储的数据符合题目要求。
判断溢出
问题在于如何判断插入后的数据是否超出 [INT_MIN,INT_MAX] 的范围导致溢出
我们来探索不等式 成立的充分必要条件。
先看右半边即 。
对于任意整数 i 我们有 如对于 123 123/1012 123mod103 12312*103 。
不等式化为 带入
移项化简得 记
当 revm 时如果还要推入数字那么 digit≤2 因为 INT_MAX 的最高位为 2 此时不等式左边等于 0 右边为正数不等式恒成立。当 revm 时不等式左边至少是 10 右边至多是 7 不等式恒不成立。当 revm 时不等式左边至多是 -10 右边至少是 7-9-2 不等式恒成立。
所以原不等式右半边成立的充分必要条件是 即 。同理左半边成立的充分必要条件是 。
原不等式成立的充分必要条件是 。
// 方法一数学
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;}
};