Enc*_*her 3 java if-statement function while-loop mod
我写了一个代码,它在两个数相除后找出商,但不使用乘法、除法或 mod 运算符。
我的代码
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;
}
Run Code Online (Sandbox Code Playgroud)
我的代码通过了像股息=-1、除数=1 或除数=1 和除数=-1 之类的测试用例。但是它不能通过像dividend = --2147483648和divisor =-1这样的测试用例。但是,当两个输入都为负时,我有一个 if 语句。
if(fun_dividend<0 && fun_divisor<0){
return count;
}
Run Code Online (Sandbox Code Playgroud)
当我的输入是 -2147483648 和 -1 时,它返回零。我调试了我的代码,发现它无法到达while循环的内部语句。它只是检查while循环并终止并执行
if(fun_dividend<0 && fun_divisor<0){
return count;
}
Run Code Online (Sandbox Code Playgroud)
很明显,两个输入都是负数,所以我使用Math.abs函数使它们成为正数。但是当我尝试查看变量 abs_dividend 和 abs_divisor 的值时,它们显示负值。
整数最大值可以是 9 位数字。那么我怎么能通过这个测试用例呢?根据此测试用例,股息是一个 10 位数字,对于整数范围无效。
根据测试用例,我得到的输出应该是 2147483647。
我怎么能解决这个错误?
先感谢您。
尝试为此使用位操作,如下所示:
public static int divideUsingBits(int dividend, int divisor) {
// handle special cases
if (divisor == 0)
return Integer.MAX_VALUE;
if (divisor == -1 && dividend == Integer.MIN_VALUE)
return Integer.MAX_VALUE;
// get positive values
long pDividend = Math.abs((long) dividend);
long pDivisor = Math.abs((long) divisor);
int result = 0;
while (pDividend >= pDivisor) {
// calculate number of left shifts
int numShift = 0;
while (pDividend >= (pDivisor << numShift)) {
numShift++;
}
// dividend minus the largest shifted divisor
result += 1 << (numShift - 1);
pDividend -= (pDivisor << (numShift - 1));
}
if ((dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0)) {
return result;
} else {
return -result;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5078 次 |
| 最近记录: |