leetcode--运算不使用加减乘除

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值