[leetcode]Divide two integers

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
                
        


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章