LeetCode 29 兩數相除 中等

2021-09-28 11:02:56 字數 1422 閱讀 5258

給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。

返回被除數 dividend 除以除數 divisor 得到的商。

示例 1:

輸入: dividend = 10, divisor = 3

輸出: 3

示例 2:

輸入: dividend = 7, divisor = -3

輸出: -2

說明:被除數和除數均為 32 位有符號整數。

除數不為 0。

假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231,  231 − 1]。本題中,如果除法結果溢位,則返回 231 − 1。

class solution:

def divide(self, dividend: int, divisor: int) -> int:

sig = true if dividend*divisor > 0 else false # 判斷二者相除是正or負

dividend, divisor= abs(dividend), abs(divisor) # 將被除數和除數都變成正數

res = 0 # 用來表示減去了多少個除數,也就是商為多少

while divisor <= dividend: # 當被除數小於除數的時候終止迴圈

tmp_divisor, count = divisor, 1 # 倍增除數初始化

while tmp_divisor <= dividend: # 當倍增後的除數大於被除數重新,變成最開始的除數

dividend -= tmp_divisor

res += count

count <<= 1 # 向左移動一位(計數翻倍)

tmp_divisor <<= 1 # 更新除數(將除數擴大兩倍)

res_value = res if sig == true else -res # 給結果加上符號

參考:除法到減法的轉化

小學生都會的列豎式算除法

LeetCode29 兩數相除

給定兩個整數,被除數dividend和除數divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數dividend除以除數divisor得到的商。示例 1 輸入 dividend 10,divisor 3輸出 3示例 2 輸入 dividend 7,divisor 3輸出 2說...

LeetCode 29 兩數相除

給定兩個整數,被除數dividend和除數divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數dividend除以除數divisor得到的商。示例 1 輸入 dividend 10,divisor 3 輸出 3 示例 2 輸入 dividend 7,divisor 3 輸出...

leetcode 29 兩數相除

給定兩個整數,被除數dividend和除數divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數dividend除以除數divisor得到的商。示例 1 輸入 dividend 10,divisor 3輸出 3示例 2 輸入 dividend 7,divisor 3輸出 2說...