[leetcode]兩數相除(Divide Two Integers)
阿新 • • 發佈:2018-12-18
兩數相除(Divide Two Integers)
給定兩個整數,被除數 dividend
和除數 divisor
。將兩數相除,要求不使用乘法、除法和 mod 運算子。
返回被除數 dividend
除以除數 divisor
得到的商。
示例 1:
輸入: dividend = 10, divisor = 3 輸出: 3
示例 2:
輸入: dividend = 7, divisor = -3 輸出: -2
說明:
- 被除數和除數均為 32 位有符號整數。
- 除數不為 0。
假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−2^31, 2^31 − 1]。本題中,如果除法結果溢位,則返回 2^31 − 1。
題解1:
class Solution { public: int divide(int dividend, int divisor) { if (divisor == 0 || (dividend == INT_MIN && divisor == -1)) return INT_MAX; long long m = abs((long long)dividend), n = abs((long long)divisor), res = 0; int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;//異或 if (n == 1) return sign == 1 ? m : -m; while (m >= n) { long long t = n, p = 1; while (m >= (t << 1)) { p <<= 1; t <<= 1; } res += p; m -= t; } return sign > 0 ? res : -res; } };
題解2:
額 ,這題出的不嚴謹,沒限制/的使用,本來就是試試結果過了
class Solution {
public:
int divide(int dividend, int divisor) {
if(dividend==-2147483648&&divisor==-1) return 2147483647;
return dividend/divisor;
}
};