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
因为不能使用除法乘法和取余,开始我先每次减一个divisor并计数,然而超时了,在大数且被除数很小的时候。改进的方法是使用两个循环,外循环判断还能不能再减,内循环每回尝试减divisor,可以减的话就把divisor*2,计数也*2,,不能减了再跳到外循环计数重新从1开始。
class Solution:
def divide(self, dividend: int, divisor: int) -> int:
dd=abs(dividend)
dr=abs(divisor)
ans=0
while dd>=dr:
tmp,i=dr,1
while dd>=tmp:
dd=dd-tmp
ans+=i
tmp=tmp<<1
i=i<<1
if dividend<0 and divisor>0:
ans=-ans
elif dividend>0 and divisor<0:
ans=-ans
else:
ans=ans
return min(max(-2147483648, ans), 2147483647)