# 29. Divide Two Integers

## 27 Dec 29. Divide Two Integers

Given two integers `dividend` and `divisor`, divide two integers without using multiplication, division, and mod operator.

The integer division should truncate toward zero, which means losing its fractional part. For example, `8.345` would be truncated to `8`, and `-2.7335` would be truncated to `-2`.

Return the quotient after dividing `dividend` by `divisor`.

Note: Assume we are dealing with an environment that could only store integers within the 32-bit signed integer range: `[−231, 231 − 1]`. For this problem, if the quotient is strictly greater than `231 - 1`, then return `231 - 1`, and if the quotient is strictly less than `-231`, then return `-231`.

Example 1:

```Input: dividend = 10, divisor = 3
Output: 3
Explanation: 10/3 = 3.33333.. which is truncated to 3.
```

Example 2:

```Input: dividend = 7, divisor = -3
Output: -2
Explanation: 7/-3 = -2.33333.. which is truncated to -2.
```

Constraints:

• `-231 <= dividend, divisor <= 231 - 1`
• `divisor != 0`

for example, if we want to calc (17/2)

ret = 0;

17-2 ,ret+=1; left=15

15-4 ,ret+=2; left=11

11-8 ,ret+=4; left=3

3-2 ,ret+=1; left=1

ret=8;

class Solution:
def divide(self, dividend: int, divisor: int) -> int:
is_minus = (dividend < 0 and divisor > 0) or (dividend > 0 and divisor < 0 )
result = 0
dividend = abs(dividend)
divisor = abs(divisor)
sub = divisor
c = 1
while (dividend >= divisor):
if dividend >= sub:
dividend = dividend – sub
result = result + c
sub = (sub<<1)
c = (c<<1)
else:
sub = (sub>>1)
c = (c>>1)
if is_minus:
result = -result

if result > 2**31 -1:
result = 2 ** 31 -1
elif result < -(2**31):
result = -(2**31)
return result