leetcode 29. 兩數相除(Divide Two Integers)
阿新 • • 發佈:2019-04-12
code cpp lis 示例 vid int else divide tle
目錄
- 題目描述:
- 示例 1:
- 示例 2:
- 解法:
題目描述:
給定兩個整數,被除數 dividend
和除數 divisor
。將兩數相除,要求不使用乘法、除法和 mod 運算符。
返回被除數 dividend
除以除數 divisor
得到的商。
示例 1:
輸入: dividend = 10, divisor = 3
輸出: 3
示例 2:
輸入: dividend = 7, divisor = -3
輸出: -2
說明:
- 被除數和除數均為 32 位有符號整數。
- 除數不為 0。
- 假設我們的環境只能存儲 32 位有符號整數,其數值範圍是 [?231, 231 ? 1]。本題中,如果除法結果溢出,則返回 231 ? 1。
解法:
class Solution { public: int divide(int dividend, int divisor) { long long dvd = dividend; long long dvr = divisor; bool neg = false; if(dvd < 0 && dvr < 0){ dvd = -dvd; dvr = -dvr; }else if(dvd < 0 || dvr < 0){ neg = true; dvd = max(dvd, -dvd); dvr = max(dvr, -dvr); } if(dvd < dvr){ return 0; }else{ long long res = 0; while(dvd >= dvr){ long long multi = 1; long long val = dvr; while(dvd >= val){ multi <<= 1; val <<= 1; } multi >>= 1; val >>= 1; res += multi; dvd -= val; } if(neg){ res = -res; } if(res > INT_MAX || res < INT_MIN){ res = INT_MAX; } return res; } } };
leetcode 29. 兩數相除(Divide Two Integers)