b_lc_實現除法(倍增思想)
阿新 • • 發佈:2021-10-13
給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。
class Solution: def divide(self, a: int, b: int) -> int: # def mul(a, k): # if a == 0 or k == 0: # return 0 # if k == 1: # return a # if a == 1: # return b # return a + mul(a, k - 1) # 類比快速冪 def mul(a, k): ans = 0 while k: if k & 1: ans += a k >>= 1 a <<= 1 return ans flag = -1 if a * b < 0 else 1 a, b = abs(a), abs(b) l, r = 0, a ans = 0 while l <= r: m = l + r >> 1 if mul(m, b) <= a: l = m + 1 ans = m else: r = m - 1 ans *= flag maxInt = pow(2, 31) - 1 if ans > maxInt or ans < -maxInt - 1: return maxInt return ans