原题:
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
-2147483647
so 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.(希望也能帮助你的理解)