学习目标:
每日一题-两数相除学习内容:
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
解法:
class Solution:
def divide(self, dividend: int, divisor: int) -> int:
if dividend == -2147483648 and divisor == -1:
return 2147483647
a, b, res = abs(dividend), abs(divisor), 0
for i in range(31, -1, -1):
# 2^i * b <= a 换句话说 a/b = 2^i + (a-2^i*b)/b
if (b << i) <= a:
res += 1 << i
a -= b << i
return res if (dividend > 0) == (divisor > 0) else -res