您的位置:首页 > 其它

[Leetcode7]之Reverse Integer

2018-03-25 18:28 309 查看
原题:
Given a 32-bit signed integer, reverse digits of an integer.Example 1:Input: 123
Output: 321
Example 2:Input: -123
Output: -321
Example 3:Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
题目要求输入的数字x不能超出32位有符号整数的范围,否则输出0,这里就涉及到一个判断数字overflow的问题。
代码:class Solution {
public:
int reverse(int x) {
int ans = 0;
bool isNegative = x < 0;
if (isNegative)
x = -x;
while (x){
int temp = ans * 10 + x % 10;
if (temp / 10 != ans) // check overflow
return 0;
ans = temp;
x /= 10;
}
if (isNegative)
return -ans;
else
return ans;
}
};这里为何对
temp / 10 != ans
进行判断呢?
我开始也不太理解,后来在上面看到了一个大神@harinarayanabatta1997的解释,豁然开朗。
printf("%d\n",2147483647); //max value of an int;
printf("%d\n",2147483648); //max value of an int+1;
printf("%d\n",2147483649); //max value of an int+2;
output:
2147483647
-2147483648
-2147483647so this process continues to cycle. so 
(temp/10)!=ans;
 implies that the number has overflown since when the number starts to overflow we can notice the difference between 
temp
 and 
ans
.
int max = 2147483647;
int test = 214748364;
int temp1 = (2147483647*10); //int temp1 = (max*10);
int temp2 = (214748364*10);  //int temp2 = (test*10);
printf("%d\n",max );
printf("%d\n",temp1/10 );  //temp1/10!=max (overflow);
printf("%d\n",temp2/10 );  //temp2/10==test; (no overflow);

output:
2147483647
-1
214748364

hope this will help you.(希望也能帮助你的理解)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: