leetcode解题-divide two integers


描述

Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.

分析

不用乘法、除法、取模运算来实现除法。可以只用加减法来实现,但是太慢了。可以用位运算来加速。

代码

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class (object):
def divide(self, dividend, divisor):
"""
:type dividend: int
:type divisor: int
:rtype: int
"""

MAX_INT = (1 << 31) - 1
r = 0
p1 = dividend > 0
p2 = divisor > 0
sign = -1 if p1 ^ p2 else 1
dividend = abs(dividend)
divisor = abs(divisor)
while dividend >= divisor:
d = divisor
i = 1
while d <= dividend:
dividend -= d
r += i
d <<= 1
i <<= 1
return min(sign * r, MAX_INT)