divide two integers


Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class {
public int divide(int dividend, int divisor) {
if(divisor == 0 || (dividend == Integer.MIN_VALUE && divisor == -1))
return Integer.MAX_VALUE;
long dend = Math.abs((long)dividend), sor = Math.abs((long)divisor);
int result = 0;
int sign = (dividend < 0)^(divisor < 0)?-1:1;
while(dend >= sor) {
long temp = sor, mul = 1;
while(dend >= (temp << 1)) {
temp <<= 1;
mul <<= 1;
}
dend -= temp;
result += mul;
}
return sign==1?result:-result;
}
}