Divide two integers without using multiplication, division and mod operator.
dividend = divisor*2^0 + divisor*2^1 + ... + divisor*2^n + mod; (mod<divisor).
public class Solution {
public int divide(int dividend, int divisor) {
// Start typing your Java solution below
// DO NOT write main() function
if(dividend == 0 || divisor == 0)
return 0;
int sign = 1;
if(dividend < 0)
sign = -sign;
if(divisor < 0)
sign = -sign;
long dd;
long dr;
if(dividend == Integer.MIN_VALUE)
dd = (long)Integer.MAX_VALUE + 1;
else
dd = Math.abs(dividend);
if(divisor == Integer.MIN_VALUE)
dr = (long)Integer.MAX_VALUE + 1;
else
dr = Math.abs(divisor);
long count = 1;
long num = dr;
while(num < dd){
num <<= 1;
count <<= 1;
}
int result = 0;
while(num >= dr){
while(dd >= num){
dd -= num;
result += count;
}
num >>= 1;
count >>= 1;
}
if(sign < 0)
return -result;
else
return result;
}
}

本文提供了一种方法,在不使用乘法、除法和取模操作的情况下,实现两个整数的除法运算。通过将被除数表示为除数的幂次之和,利用位移和减法操作进行计算。
800

被折叠的 条评论
为什么被折叠?



