LeetCode 29 兩數相除

2021-10-08 03:44:07 字數 1040 閱讀 5371

給定兩個整數,被除數 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∑

n​2i

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