leetcode29 兩數相除

2021-09-29 10:41:55 字數 1251 閱讀 6031

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

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

示例 1:

輸入: dividend = 10, divisor = 3

輸出: 3

示例 2:

輸入: dividend = 7, divisor = -3

輸出: -2

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

除數不為 0。

class solution:

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

sign=true if dividend^divisor >=0 else false #異或判斷結果正負號

dividend,divisor=abs(dividend),abs(divisor) #取絕對值運算

res=0 #返回的result結果

while divisor<=dividend: #除數比被除數小的時候

tem,count=divisor,1 #臨時除數變數tem

while tem<=dividend: #臨時除數小魚被除數繼續運算

res=count+res #res計算被除數中迴圈到現在已經有了多少個除數

dividend=dividend-tem #被除數減去除數,因為那個已經被計算了

count<<=1 #count左移一位,因為不能用乘除

tem<<=1 #tem左移一位

res=res if sign else -res #最後結果的正負號

res = max(min(res,2**31-1),-2**31) #判斷是否溢位

return res

總結:在做這道題的時候,雖然運算不難,但是花了不少時間。問題總結如下:

1.用<< 左移的時候,沒有寫成<<=,沒有賦值成功。符號用的粗心導致。

2.提交之後,溢位的時候總是和預期結果差了1,是因為先判斷了是否溢位後做的正負號判斷。邏輯前後顛倒導致。

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說...