1 加法
使用与进位,异或当前位
2 除法:
29. 两数相除
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
def divide(self, dividend: int, divisor: int) -> int:
# 将被除数和除数转化为正数
sign = 1
if divisor * dividend < 0: # 如果符号不同,则结果返回要变成负数
sign = -1
divisor = abs(divisor)
dividend = abs(dividend)
elif divisor < 0 and dividend < 0: # 如果被除数和除数都是负值,结果不修改符号
divisor = abs(divisor)
dividend = abs(dividend)
remain = dividend # 余数
result = 0 # 商
while remain >= divisor:
cur = 1 # 倍增商
div = divisor # 倍增值
while div + div < remain:
cur += cur
div += div
remain -= div # 余数递减
result += cur # 商值累计
if sign==-1:
result = -result
if result>=2**31: # 按照题目要求,溢出处理
result = 2**31-1
return result