我一直在leetcode上编码,在32位环境下反转数字。对于 x=-2147483648 的测试用例,会弹出此错误。我已经看到了同一问题的其他解决方案,并且我理解它们,但我只是想知道为什么这段代码是错误的..
int reverse(int x) {
if (x==0){
return 0;
}
bool n = false;
if (x<0){
x = -x;
n = true;
}
long num = 0,count =0;
while (x>0){
int rem;
rem = x%10;
x = x/10;
if ( (num*10) > (pow(2,31)-1) || (num*10) < -pow(2,31)){
return 0;
}
num = num*10 + rem;
}
if(n==true){
num = -num;
}
return num;
}
这是我尝试过的代码
问题是int的范围不对称。对于 32 位 int,取值范围为
[-2147483648, 2147483647]
,因此无法表示 -2147483648
的否定。