题目
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
题目要求
除法运算,但是不能用编程语言提供的乘法、除法和取模运算,即只能用加法和减法实现。
解题思路
为了加速运算,可以依次将被除数减去1,2,4,8,..倍的除数。所以这里可以用移位来进一步加速。本方法参考了kitt的博文。另外需要注意的是溢出问题。因为Python本身是没有溢出问题的,所以需要在最后判断,结果是否溢出,如果溢出则要返回MAX_INT
代码
class Solution(object):
def divide(self, dividend, divisor):
"""
:type dividend: int
:type divisor: int
:rtype: int
"""
MAX_INT = 2147483647
sign = 1 if (dividend > 0 and divisor > 0) or (dividend < 0 and divisor < 0) else -1
quotient = 0
dividend = abs(dividend)
divisor = abs(divisor)
while dividend >= divisor:
k = 0
tmp = divisor
while dividend >= tmp:
dividend -= tmp
quotient += 1 << k
tmp <<= 1
k += 1
quotient = sign * quotient
if quotient > MAX_INT:
quotient = MAX_INT
return quotient