我有一个基本上反转有符号整数的简单方法。此函数一直有效,直到整数小于或等于32位。 例如: -
input = 321
output = 123
input = -321
output = -123
input = 1534236469
output = 9646324351 //this value is wrong.
expected output = 0
我想检测整数溢出并在这种情况下返回0。 以下是函数的代码
int reverse(int x) {
int number = x;
bool negative = false;
if(number<0){
negative = true;
number *= -1;
}
int reversed = 0;
while (number != 0){
int reminder = number % 10;
reversed = (reversed * 10) + reminder;
number /= 10;
}
if(negative){
reversed *= -1;
}
return reversed;
}
此外,如果我将输入和输出更改为有符号长,我得到所需的输出,但我想检测整数溢出并返回0.
答案 0 :(得分:3)
在将reversed
乘以10之前,请检查以确保它足够小以乘以10。
同样,在添加remainder
之前,请检查以确保其足够小以添加remainder
。
你可以使用一个聪明的技巧来增加,但在你的水平你可能不应该:
if ((reversed += remainder) < remainder) {
//overflow
}
请注意,只有当reversed
和remainder
都无符号时,此技巧才有效。
答案 1 :(得分:0)
此提示可能有助于您完成作业:
如果您的最终号码长度为10位且第一个数字最终高于或等于2,则您只会获得整数溢出。
这意味着如果您的原始数字也是10位数且最后一位数字是2或更高,那么您将获得整数溢出。