題目要求不能使用乘法、除法和除餘運算,但我們可以將除法轉移到對數域。
$\frac = e^} = e^$
這樣就轉化為指數、對數和減法運算了。因為只能對正整數取對數,因此我們首先要將兩個數都取絕對值,最後再加上符號。
同時,題目要求只能儲存 32 位有符號整數,因此,當資料大於上邊界時,需要進行特殊處理。
class solution
};
利用移位操作。看下面的例子:
$ 10 \to 2^1 * 3 + 2^0 * 3 \to \frac = 2^1 + 2^0 = 3$
$ 10 \to 2^2 * 2 + 2^0 * 2 \to \frac = 2^2 + 2^0 = 5$
$ 10 \to 2^3 * 1 + 2^1 * 1 \to \frac = 2^3 + 2^1 = 10$
我們可以對被除數進行分解。以 10 和 3 為例,首先我們確定 3 的最高次係數,$ 10 > 3*2^1 $ && $ 10 < 3*2^2$,因此最高次係數為 2。然後我們用 10 減去 $3*2^1$,繼續進行剛才的過程,$ 4 > 3*2^0 $ && $ 4 < 3*2^1$,2 的第二高次係數為 1。我們迴圈進行這個過程,直到最後的數小於除數為止,這些除數前面所有係數的和即為所求。
class solution
a -= temp;
result += cnt;
}if ((dividend < 0) ^ (divisor < 0)) result = -result;
if (result > int_max) result = int_max; // int_max = 2^32 - 1
return result;*/}};
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說...