29. Divide Two Integers
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
Solution from Forum
public int divide(int dividend, int divisor) {
long d1 = dividend, d2 = divisor;
long result = divideLong(Math.abs(d1), Math.abs(d2));
result = d1 * d2 < 0 ? -result : result;
if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE){
return Integer.MAX_VALUE;
}
return (int) result;
}
public long divideLong(long dividend, long divisor) {
// Return if nothing to divide
if (dividend < divisor) {
return 0;
}
long sum = divisor;
long divideTimes = 1;
while (sum + sum <= dividend) {
sum += sum;
divideTimes += divideTimes;
}
// Make a recursive call for (devided-sum) and add it to the result
return divideTimes + divideLong(dividend - sum, divisor);
}