class Solution:
def divide(self, dividend: int, divisor: int) -> int:
MAX_INT = 2**31 - 1
MIN_INT = -2**31
#涉及符号问题的,用flag记录最后的符号
flag = 1
if dividend < 0:
dividend, flag = -dividend, -flag
if divisor < 0:
divisor, flag = -divisor, -flag
#迭代
if divisor > dividend:
return 0
res = 0
while dividend >= divisor:
tmp = divisor
multiply = 1
while tmp + tmp <= dividend:
tmp += tmp
multiply += multiply
res += multiply
dividend -= tmp
if flag < 0: res = -res
if res > MAX_INT:
return MAX_INT
elif res < MIN_INT:
return MIN_INT
else:
return res
'''
#递归
def div(dividend, divisor):
tmp = divisor
if divisor > dividend:
return 0
multiply = 1
while tmp + tmp <= dividend:
tmp += tmp
multiply += multiply
return div(dividend - tmp, divisor) + multiply
res = div(dividend, divisor) if flag > 0 else -div(dividend, divisor)
if res > MAX_INT:
return MAX_INT
elif res < MIN_INT:
return MIN_INT
else:
return res
'''