题目描述
题目示例
自己思路
创建一个方法,创建sum,反复对被除数进行减法操作,每一次减去一个除数,对剩余数进行比较,如果大于等于除数继续减,没减一次sum加1相当于商。
代码如下:
但错误:
力扣思路
力扣思路与我想出的大致相同,但由于编码问题没有跑对。下面是力扣思路:
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
思路:1.判断dividend是否超出范围
2.获取绝对值,方便进行负数除法
3.用i循环31 从大到小 ; 如下图所示,b<<i相当于下图的100000和被除数进行对比,对res和a进行相应操作 res+1<<i:商从左到右进行操作 a-=b<<i:对被除数进行相减
4.最后返回res 如果除数被除数符号相同返回res,否则返回-res
位运算原理