## Problem Statement

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, which means losing its fractional part. For example, `truncate(8.345) = 8`

and `truncate(-2.7335) = -2`

.

**Example 1:**

Input:dividend = 10, divisor = 3Output:3Explanation:10/3 = truncate(3.33333..) = 3.

**Example 2:**

Input:dividend = 7, divisor = -3Output:-2Explanation:7/-3 = truncate(-2.33333..) = -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: [−2
^{31}, 2^{31}− 1]. For the purpose of this problem, assume that your function**returns 2**.^{31}− 1 when the division result overflows

**Solution:**

class Solution:
def divide(self, dividend: int, divisor: int) -> int:
INT_MIN = -2**31
INT_MAX = 2**31-1
if dividend==INT_MIN and divisor==-1:
return INT_MAX
a = abs(dividend)
b = abs(divisor)
result=0
while a-b>=0:
x=0
while a-(b<<1<<x)>=0:
x+=1
result += 1<<x
a -= b<<x
if (dividend>=0) == (divisor>=0):
return result
else:
return -result