c中的反向整数产生溢出

我正在用C语言在leetcode中解决反向整数问题,但是它在sum = sum + rem * 10;上给出了运行时错误。

runtime error: signed integer overflow: 964632435 * 10 cannot be represented in type 'int'

这是代码。

#define INT_MAX 2147483647
#define INT_MIN -2147483648

int reverse(int x){
    int sum=0,rem=0;
    int p;
    if(x > INT_MAX || x < INT_MIN){return 0;}
    if(x==0){return 0;}
    if(x<0){p=x;x=abs(x);}
    while(x%10==0){x=x/10;}

    while(x>0){
        rem=x%10;

        if(sum > INT_MAX || sum*(-1) < INT_MIN){return 0;}        
        sum=sum*10+rem;

        x/=10;
    }
    if(p<0){sum=sum*(-1);return sum;}
    else{return sum;}
}
评论