leetcode 7 整数反转 c++
2020-01-14 09:41
155 查看
7整数反转
题目链接:https://leetcode-cn.com/problems/reverse-integer/submissions/
这个题也是一个输出控制,本身不难,难在对特殊测试样例的处理。题目要求反转后溢出的数(在$ [−2^{31}, 2^{31} − 1]范围以外),输出结果要是0,这就挺烦的了。我是先把负数输入变成正的,再取余移位,但这里就有个问题,负数是可以输入范围以外),输出结果要是0,这就挺烦的了。我是先把负数输入变成正的,再取余移位,但这里就有个问题,负数是可以输入范围以外),输出结果要是0,这就挺烦的了。我是先把负数输入变成正的,再取余移位,但这里就有个问题,负数是可以输入-2^{31}$的,但是变成正数2312^{31}231就溢出了,所以先要处理这个特殊的数。然后就是反转溢出的判定,这里我原来写的是:
if((result*10+signal*(tem%10))>(pow(2,31)-1)||(result*10+signal*(tem%10))<(-pow(2,31))){
也就是先乘起来再和边界比较,结果发现
(result*10+signal*(tem%10)是会溢出的,就改成了
if(result>((pow(2,31)-1-signal*(tem%10))/10)||result<((-pow(2,31)-signal*(tem%10))/10)){
这样子
(pow(2,31)-1-signal*(tem%10)是绝不会溢出的,原因就在于pow返回的类型是double,这范围就大了([−1.7∗10308,−1.7∗10−308]⋃[1.7∗10−308,1.7∗10308][-1.7*10^{308},-1.7*10^{-308}]\bigcup[1.7*10^{-308},1.7*10^{308}][−1.7∗10308,−1.7∗10−308]⋃[1.7∗10−308,1.7∗10308],这样子就不会溢出了。
class Solution { public: int reverse(int x) { int result=0; int signal=1; int tem=x; if (x<0){ signal=-1; if(x==-pow(2,31)){ tem=0; } else{ tem=-x; } } while(tem!=0){ if(result>((pow(2,31)-1-signal*(tem%10))/10)||result<((-pow(2,31)-signal*(tem%10))/10)){result=0; break; } result=result*10+signal*(tem%10); tem=(int)(tem/10); } return result; } };
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- leetcode整数反转C++版
- leetcode 7. 反转整数(c++版)
- Leetcode(C++)——7. 整数反转
- LeetCode-探索-初级-字符串-整数反转-java
- LeetCode Reverse Integer 反转整数
- LeetCode7.整数反转 JavaScript
- leetcode:整数反转
- LeetCode7-整数反转
- [C++]LeetCode 9: Palindrome Number(判断整数是否是回文数)
- LeetCode92-反转链表 II(C++实现)
- LeetCode刷题记——第7题(整数反转)
- leetcode 7.整数反转
- Leetcode(7)之整数反转
- (LeetCode每日一刷02)反转整数
- [C++]LeetCode 12: Integer to Roman(将整数转换为罗马数字)
- [leetcode 7] 整数反转 python
- Leetcode每日一道 -- 整数反转
- LeetCode - 7. 反转整数
- leetcode-整数反转
- LeetCode(7)——整数反转