两数相除

https://leetcode.cn/problems/divide-two-integers/description/

给你两个整数,被除数dividend和除数divisor。将两数相除,要求 不使用 乘法、除法和取余运算。

整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345将被截断为8-2.7335将被截断至-2

返回被除数dividend除以除数divisor得到的

注意: 假设我们的环境只能存储32位有符号整数,其数值范围是[−2^31, 2^31 − 1]。本题中,如果商 严格大于 2^31 − 1,则返回 2^31 − 1;如果商 严格小于 -2^31,则返回-2^31

示例1

输入: dividend = 10, divisor = 3
输出: 3
解释: 10/3 = 3.33333.. ,向零截断后得到 3 。

示例2

输入: dividend = 7, divisor = -3
输出: -2
解释: 7/-3 = -2.33333.. ,向零截断后得到 -2

提示 - -2^31 <= dividend, divisor <= 2^31 - 1 - divisor != 0

class Solution:
    def divide(self, dividend: int, divisor: int) -> int:
        sign = 1
        if dividend * divisor < 0:
            sign = -1
            dividend = abs(dividend)
            divisor = abs(divisor)
        elif dividend < 0 and divisor < 0:
            dividend = abs(dividend)
            divisor = abs(divisor)

        remind = dividend
        count = 0
        while remind >= divisor:
            remind -= divisor
            count += 1

        left = -(2 << 31)
        right = 2<<31 - 1
        if count >= left or count <= right:
            return count * sign
        elif count < left:
            return left
        else:
            return right