使用的是移位操作,写的有点恶心啊
乘法和除法类似。相对更加简单。。。
class Solution:
def divide(self, dividend, divisor):
m = abs(dividend)
n = abs(divisor)
if m == 0 or m < n:
return 0
min_val, max_val = -2147483648, 2147483647
res = 0
for i in range(31,-1,-1):
if (m>>i)>=n: ### 找到最大的左移位数
res += 1<<i ### 计算移位后的最大数值2^i
m -= n<<i ### 用dividend减去divisor*(2^i)
### 比如10÷3,先将10左移到>=3的最大移位数1,然后10-3*2^1=4.继续上面流程。
if (dividend > 0 and divisor > 0) or (dividend < 0 and divisor < 0):
if res > max_val:
return max_val
else:
return res
else:
return -res