leetcode 两数相除 python3

    科技2024-06-28  75

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

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

    整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2

    示例 1: 输入: dividend = 10, divisor = 3 输出: 3 解释: 10/3 = truncate(3.33333..) = truncate(3) = 3 示例 2: 输入: dividend = 7, divisor = -3 输出: -2 解释: 7/-3 = truncate(-2.33333..) = -2 class Solution: def divide(self, dividend: int, divisor: int) -> int: flag = 1 if (dividend < 0) == (divisor < 0) else -1 num1 = abs(dividend) num2 = abs(divisor) if num1 < num2: return 0 if num1 == num2: return flag arrange = range(num2,num1,num2) result = len(arrange) if arrange[-1] + num2 <= num1: result += 1 if flag == -1: result = -result return min(result,2**31 - 1) class Solution: def divide(self, dividend: int, divisor: int) -> int: flag = 1 if dividend^divisor < 0: flag = -1 dividend = abs(dividend) divisor = abs(divisor) result =0 while dividend >= divisor: temp, i = divisor, 1 while dividend >= temp: dividend -= temp result += i temp <<= 1 i <<= 1 result = result*flag return min(max(-2**31,result),2**31-1) class Solution: def divide(self, dividend, divisor): """ :type dividend: int :type divisor: int :rtype: int """ res, divd, divs = 0, None, None pos = False if (dividend < 0) ^ (divisor < 0) else True divd, divs = abs(dividend), abs(divisor) if divd < divs: return 0 mod = 2**31 while divs <= divd: mul, tmp = 1, divs while (tmp << 1) <= divd: mul <<= 1 tmp <<= 1 res += mul divd -= tmp if res == mod: break if pos and res == mod: res -= 1 return res if pos else -res
    Processed: 0.018, SQL: 8