class Solution():
def divide(self, dividend, divisor):
positive = (dividend < 0) is (divisor < 0)
dividend, divisor = abs(dividend), abs(divisor)
res = 0
while dividend >= divisor:
temp, i = divisor, 1
while dividend >= temp:
dividend -= temp
res += i
i <<= 1
temp <<= 1
if not positive:
res = -res
return min(max(-2**31, res), 2**31-1)
if __name__ == "__main__":
assert Solution().divide(123, 12) == 10
assert Solution().divide(123, -12) == -10
assert Solution().divide(-123, 12) == -10
assert Solution().divide(-123, -12) == 10