給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。
返回被除數 dividend 除以除數 divisor 得到的商。
整數除法的結果應當截去(truncate)其小數部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
public int divide(int dividend, int divisor)
}return sign ? ret : -ret;
}
被除數
=除數∗
商+餘數
=除數∗
(2i1
+2i2
+⋯+2
in)+
餘數
被除數 = 除數 * 商 + 餘數 = 除數 * (2^ + 2^ +\cdots+ 2^) + 餘數
被除數=除數
∗商+餘
數=除數
∗(2i
1+2
i2+
⋯+2i
n)+
餘數商 =∑
j=1n
2i
j商 = \sum_^}
商=j=1∑
n2i
j對於迴圈模組,首先找到最大的 i,滿足被除數
≥除數∗
2i
被除數 \geq 除數 * 2^i
被除數≥除數
∗2i,**體現為(a >> i) >= b
,然後商+=
2i
商 += 2^i
商+=2
i,**體現為ret += 1 << i
,此時被除數變為被除數
=被除數
−除數∗
2i
被除數 = 被除數 - 除數 * 2^i
被除數=被除
數−除數
∗2i,**體現為a -= b << i
,不斷執行下去,直至無法找到滿足條件的 i 為止。
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說...