Divide Two Integers
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
Solution:
public int divide(int dividend, int divisor) {
int flag = (dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0) ? -1 : 1;
long ldividend = Math.abs((long) dividend);
long ldivisor = Math.abs((long) divisor);
if (ldividend == 0 || (ldividend < ldivisor)) {
return 0;
}
long lresult = ldivide(ldividend, ldivisor);
int result;
if (lresult > Integer.MAX_VALUE) {
result = (flag == 1) ? Integer.MAX_VALUE : Integer.MIN_VALUE;
} else {
result = (int) (flag * lresult);
}
return result;
}
private long ldivide(long ldividend, long ldivisor) {
if (ldividend < ldivisor)
return 0;
long sum = ldivisor;
long multiple = 1;
while ((sum << 1) <= ldividend) {
sum <<= 1;
multiple <<= 1;
}
return multiple + ldivide(ldividend - sum, ldivisor);
}