class Solution {
public int divide(int dividend, int divisor) {
long result = 0;
boolean isNeg = false;
long x = dividend;
long y = divisor;
if ((dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0))
isNeg = true;
x = Math.abs(x);
y = Math.abs(y);
long left = 0;
long right = x;
while (left < right) {
long mid = (left + right + 1) >> 1;
if (quickMul(y, mid) <= x) {
left = mid;
} else {
right = mid - 1;
}
}
result = isNeg ? -left : left;
if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE)
return Integer.MAX_VALUE;
return (int)result;
}
public long quickMul(long a, long b) {
// 快速乘法, 本题中只考虑正数
long result = 0;
while (b > 0) {
if ((b & 1) == 1) {
result += a;
}
b >>= 1;
a += a;
}
return result;
}
}