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; } }
|
近期评论