运行时错误:带符号的整数溢出:964632435 * 10无法以类型'int'表示

时间:2019-10-12 19:36:20

标签: c++

我正在解决取整数的问题,并得到如下错误:

Line 8: Char 20: runtime error: signed integer overflow: 964632435 * 10 cannot be represented in type 'int' (solution.cpp)

我的代码是:

public:
    int reverse(int x) {
        int last=x%10;
        int rev=0;
        while(x){
            last=x%10;
            rev=rev*10+last;
            x=x/10;
        }
        return rev;
    }
};

我不知道为什么会出现此错误。我是编程的新手。我无法理解这个概念。请有人给我解释一下,我该如何进一步。

1 个答案:

答案 0 :(得分:1)

我得到了答案。实际上,当我们使rev接近INT_MAX时,就会出现整数溢出。我们事先检查该语句是否会导致溢出。实际上,我在互联网上找到了以下解决方案,并且有效

 int reverse(int x) {
        int last=x%10;
        int rev=0;
        while(x!=0){
            last=x%10;
            if (rev>=INT_MAX/10){
                if (rev>INT_MAX/10){
                    return 0;
                }else{
                    if (last>7){
                      return 0;
                    }
                }
            }
            if (rev<=INT_MIN/10){
                if (rev<INT_MIN/10){
                    return 0;
                }else{
                    if (last<-8){
                        return 0;
                    }
                }
            }
            rev=rev*10+last;
            x=x/10;
        }
        return rev;
    }