cpp运行时错误:-2147483648的否定不能用'int'类型表示;

问题描述 投票:0回答:1

我一直在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;
}

这是我尝试过的代码

c++ debugging
1个回答
0
投票

问题是int的范围不对称。对于 32 位 int,取值范围为

[-2147483648, 2147483647]
,因此无法表示
-2147483648
的否定。

© www.soinside.com 2019 - 2024. All rights reserved.