我正在解决取整数的问题,并得到如下错误:
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;
}
};
我不知道为什么会出现此错误。我是编程的新手。我无法理解这个概念。请有人给我解释一下,我该如何进一步。
答案 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;
}