热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LeetCode7.ReverseInteger关于溢出很好的理解和处理

上界2147483647,下界-2147483648.反过来看7463847412->2147483647,-8463847412->-2147483648为使反转不越

上界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 10)
{
return false;
}
}

return false;
}
};

 

 


推荐阅读
author-avatar
手机用户2502923513
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有