LeetCode之7. Reverse Integer
来源:互联网 发布:手指充电软件下载 编辑:程序博客网 时间:2024/06/06 19:11
题目:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
意思就是把一个数反转过来,恩,是一道非常简单的题目,但是有个小坑,栽坑里好一会儿。
原来的答案如下:
class Solution {public: int reverse(int x) { if (x == 0)return 0; int abs_x = x>0 ? x : -x; int tmp = 0; while (abs_x / 10 > 0) { tmp *= 10; int mod = abs_x % 10; abs_x /= 10; tmp += mod; } tmp *= 10; tmp += abs_x; return x>0 ? tmp : -tmp; }};
- 然后坑就来了,对一个翻转后的数值大于int类型所能表达的范围(-2147483648——-2147483647)的时候。比如1534236469
反转后是9646324351远远大于2147483647,而9646324351的二进制表示如下 10 00111110111101110011101001111111
这里最后整数只取低32位,也就是00111110111101110011101001111111,换成十进制也就是1056389759。
解决办法,根据leetcode上的错误提示,它期望在越界后,返回一个0
于是这里就投机取巧,把tmp的变量设为signed long long,最后判断该值是否越界,如果越界,返回0,否则转换成int返回。代码如下
class Solution {public: int reverse(int x) { if (x == 0)return 0; int abs_x = x>0 ? x : -x; signed long long tmp = 0; while (abs_x / 10 > 0) { tmp *= 10; int mod = abs_x % 10; abs_x /= 10; tmp += mod; } tmp *= 10; tmp += abs_x; signed long long ret= x>0 ? tmp : -tmp; if (ret-2147483647>0 || ret+2147483648 <0) return 0; return (int)ret; }};
0 0
- LeetCode之7. Reverse Integer
- leetcode之Reverse Integer
- LeetCode 之 Reverse Integer
- LeetCode之Reverse Integer
- LeetCode之Reverse Integer
- LeetCode之Reverse Integer
- Leetcode之Reverse Integer
- leetcode之Reverse Integer
- LeetCode之Reverse Integer
- 【Leetcode】之Reverse Integer
- LeetCode 之 Reverse Integer
- leetcode之 Reverse Integer
- leetcode之reverse Integer
- LeetCode之Reverse Integer
- LeetCode 之 Reverse Integer
- leetcode 之 Reverse Integer
- LeetCode之Reverse Integer
- [LeetCode]7.Reverse Integer
- 101. Symmetric Tree
- LeetCode No.3 Longest Substring Without Repeating Characters
- codeforces C. Simple Strings
- bzoj2152: 聪聪可可
- Tomcat 使用详解(2)
- LeetCode之7. Reverse Integer
- Manthan, Codefest 16 C. Spy Syndrome 2 ★
- NASM中文手册
- Tomcat 优化详解(3)
- 绑定数组对象DataTable.Select返回值DataRow[]
- 发送网络请求获取数据与Handler刷新UI
- 【C++】C语言函数指针基础
- 8种基本数据类型
- hdu1034(简单模拟)