Divide two integers without using multiplication, division and mod operator.
思路:如果循环加除数的话,会超时。所以得加速加的过程,每次二倍得加,如果超了,再缩小两倍加知道满足条件,缩小两倍由于不能使用除法,可以进行移位处理。
class Solution:
# @return an integer
def divide(self, dividend, divisor):
count = 1
sum = abs(divisor)
dir = sum
div = abs(dividend)
inc_sum = sum
inc_count = count
if dividend == 0 or div < dir:
return 0
if divisor == 1:
return dividend
elif divisor == -1:
return -dividend
while sum < div:
if sum + dir >= div:
break
sum += inc_sum
count += inc_count
while sum > div:
sum -= inc_sum
count -= inc_count
inc_sum = inc_sum >> 1
inc_count = inc_count >> 1
sum += inc_sum
count += inc_count
inc_sum = inc_sum + inc_sum
inc_count = inc_count + inc_count
if dividend < 0 and divisor <0 or dividend >0 and divisor > 0:
return count
else:
return -count