我写了一段代码,用于找出两个数相除后的商,但不使用乘法、除法或取模运算符。
我的代码:
public int divide(int dividend, int divisor) {
int diff=0,count=0;
int fun_dividend=dividend;
int fun_divisor=divisor;
int abs_dividend=abs(dividend);
int abs_divisor=abs(divisor);
while(abs_dividend>=abs_divisor){
diff=abs_dividend-abs_divisor;
abs_dividend=diff;
count++;
}
if(fun_dividend<0 && fun_divisor<0){
return count;
}
else if(fun_divisor<0||fun_dividend<0) {
return (-count);
}
return count;
}
我的代码通过了一些测试用例,例如dividend=-1,divisor=1或dividend=1且divisor=-1。但是它无法通过像dividend = --2147483648和divisor =-1这样的测试用例。然而,当两个输入都为负数时,我有一个if语句。
if(fun_dividend<0 && fun_divisor<0){
return count;
}
当我的输入是-2147483648和-1时,它返回了零。我调试了一下代码,并发现它无法到达while循环的内部语句。它只检查while循环并终止并执行。
if(fun_dividend<0 && fun_divisor<0){
return count;
}
很明显,两个输入都是负数,因此我使用了
Math.abs
函数使它们变为正数。但是当我尝试查看变量 abs_dividend 和 abs_divisor 的值时,它们显示为负数。整数最大可以取9位数。那么我该如何通过这个测试用例呢?根据这个测试用例,被除数是一个10位数,这对于整数范围来说是无效的。
根据测试用例,我应该得到的输出结果是2147483647。
我该如何解决这个错误?
提前感谢您。
result += 1 << (numShift - 1);
而不是简单的result+= (numShift-1)
? - amrx