Leetcode之Divide Two Integers
阿新 • • 發佈:2018-12-28
題目:
Given two integers dividend
and divisor
, divide two integers without using multiplication, division and mod operator.
Return the quotient after dividing dividend
by divisor
.
The integer division should truncate toward zero.
Example 1:
Input: dividend = 10, divisor = 3 Output: 3
Example 2:
Input: dividend = 7, divisor = -3
Output: -2
Note:
- Both dividend and divisor will be 32-bit signed integers.
- The divisor will never be 0.
- Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 231 − 1 when the division result overflows.
程式碼:
class Solution { public: int divide(int dividend, int divisor) { if(dividend == INT32_MIN && divisor == -1) return INT32_MAX; bool sign = (dividend < 0) ^ (divisor < 0); long ldividend = labs(dividend); long ldivisor = labs(divisor); int result = 0; while(ldividend >= ldivisor) { long k = ldivisor; long l = 1; while(ldividend >= (k << 1)) { k = k << 1; l = l << 1; } result += l; ldividend -= k; } return sign ? -result : result; } };
注意:
1、不能用除法,乘法,取模運算。
2、加法和減法會超時
3、溢位情況需要單獨考慮
4、商可以寫作a*2^k+b*2^(k-1)+.....+n*2^0的形式(這就是思路)