LeetCode 29——兩數相除
1. 題目
2. 解答
2.1. 方法一
題目要求不能使用乘法、除法和除餘運算,但我們可以將除法轉移到對數域。
這樣就轉化為指數、對數和減法運算了。因為只能對正整數取對數,因此我們首先要將兩個數都取絕對值,最後再加上符號。
同時,題目要求只能儲存 32 位有符號整數,因此,當資料大於上邊界時,需要進行特殊處理。
class Solution {
public:
int divide(int dividend, int divisor) {
if(dividend == 0) return 0;
double a = fabs(dividend);
double b = fabs(divisor);
long result = exp(log(a) - log(b));
if ((dividend < 0) ^ (divisor < 0)) result = -result;
if (result > INT_MAX) result = INT_MAX;
return result;
}
};
2.2. 方法二
利用移位操作。看下面的例子:
我們可以對被除數進行分解。以 10 和 3 為例,首先我們確定 3 的最高次係數, && ,因此最高次係數為 2。然後我們用 10 減去 ,繼續進行剛才的過程, && ,第二高次係數為 1。我們迴圈進行這個過程,直到最後的數小於除數為止,這些除數前面所有係數的和即為所求。
class Solution {
public:
int divide(int dividend, int divisor) {
long a = labs(dividend); // long 型資料佔 8 個位元組,labs() 函式對 long 求絕對值
long b = labs(divisor);
long temp = b;
long result = 0;
long cnt = 1;
while (a >= b)
{
cnt = 1;
temp = b;
while (a >= (temp << 1))
{
temp = temp << 1;
cnt = cnt << 1; // 表徵除數前面的各次係數
}
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;*/
}
};
獲取更多精彩,請關注「seniusen」!
相關文章
- JAVA-LeetCode中等29兩數相除JavaLeetCode
- python LeetCode 兩數相除PythonLeetCode
- [LeetCode] Divide Two Integers 兩數相除LeetCodeIDE
- Java 兩個整數相除保留兩位小數,將小數轉化為百分數Java
- LeetCode——兩數相加LeetCode
- LeetCode:兩數之和LeetCode
- LeetCode - 兩數之和LeetCode
- Leetcode兩數相加LeetCode
- Divide Two Integers不使用乘除法來計算兩個數相除IDE
- Java 演算法-兩個整數相除(二分法)Java演算法
- LeetCode-29LeetCode
- LeetCode 2——兩數相加LeetCode
- LeetCode 1 兩數之和LeetCode
- leetcode #1 兩數之和LeetCode
- 【leetcode】【2、兩數相加】LeetCode
- LeetCode之兩數之和LeetCode
- 【LeetCode】2 兩數相加LeetCode
- LeetCode-兩數之和LeetCode
- LeetCode-兩數相加LeetCode
- LeetCode: Two sum(兩數之和)LeetCode
- LeetCode 1. 兩數之和LeetCode
- LeetCode 2.兩數相加LeetCode
- leetcode 2. 兩數相加LeetCode
- LeetCode-1. 兩數之和LeetCode
- [LeetCode] Two Sum 兩數之和LeetCode
- leetcode-0001 兩數之和LeetCode
- LeetCode 第二題兩數相加LeetCode
- 組隊刷LeetCode - 兩數之和LeetCode
- LeetCode 1 兩數之和(簡單)LeetCode
- LeetCode題集-2 - 兩數相加LeetCode
- C++等差數列(數論、歐幾里得輾轉相除gcd)C++GC
- leetcode之兩數相加解題思路LeetCode
- [LeetCode 刷題] 1. 兩數之和LeetCode
- [LeetCode 刷題] 2. 兩數相加LeetCode
- LeetCode題集-1- 兩數之和LeetCode
- Leetcode 29 Divide Two IntegersLeetCodeIDE
- 每日一道 LeetCode (1):兩數之和LeetCode
- [演算法] LeetCode 1.兩數之和演算法LeetCode