leetcode 29. 两数相除

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

整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 ,-2.7335 将被截断至 -2 。

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

注意:假设我们的环境只能存储 32 位 有符号整数,其数值范围是 −231, 231 − 1 。本题中,如果商 严格大于 231 − 1 ,则返回 231 − 1 ;如果商 严格小于 -231 ,则返回 -231 。

示例 1:

输入: dividend = 10, divisor = 3

输出: 3

解释: 10/3 = 3.33333... ,向零截断后得到 3 。

示例 2:

输入: dividend = 7, divisor = -3

输出: -2

解释: 7/-3 = -2.33333... ,向零截断后得到 -2 。

提示:

-231 <= dividend, divisor <= 231 - 1

divisor != 0

题目链接:leetcode 29

思路,可以用移位操作代替乘操作 ,以 100/3 为例, 332 = 3 << 5
100 = 3
32 + 3*1 +1 (其中 32 = 2^5, 1 也类似)。

python 复制代码
class Solution:
    def divide(self, dividend: int, divisor: int) -> int:
        if dividend == 0:
            return 0
        fu, res = 0, 0
        if (dividend > 0 and divisor < 0) or (dividend < 0 and divisor > 0):
            fu = 1
        a, b = abs(dividend), abs(divisor)
        if a >= b:
            for i in range(31, -1, -1):
                temp = b<<i
                if a >= temp:
                    res += (1<<i)
                    a -= temp
        if fu:
            res = -res
        if res > pow(2, 31)-1:
            res = pow(2,31)-1
        elif res < -pow(2, 31):
            res = -pow(2, 31)
        return res
相关推荐
智能优化与强化学习4 分钟前
Gym(Gymnasium)仿真环境详解(二):环境简介、入门算法、调参要点、核心挑战
算法·强化学习·gym·零基础入门·算法评估
mxwin15 分钟前
Unity Shader exp 函数的算法与渲染应用
算法·unity·游戏引擎·shader
“码”力全开23 分钟前
AI视频分析误报优化完整流程
算法·架构·边缘计算
深盾科技_Virbox25 分钟前
深盾科技·Virbox产品体系全景解读:软件安全如何从加密锁走向全生命周期
java·大数据·算法·安全·软件需求
可编程芯片开发1 小时前
基于VSG虚拟同步发电机控制的三相并网逆变器带多组可变负载Simulink建模与仿真
算法
AI服务老曹1 小时前
国产NPU视觉算法参数配置说明
算法·性能优化·边缘计算
彦为君1 小时前
Redis最新版本特性
java·数据库·redis·算法·bootstrap
触底反弹2 小时前
🔥 字符串算法面试三连击:反转、回文、回文变种,搞懂这三题稳了!
前端·javascript·算法
aaaameliaaa2 小时前
计算斐波那契数(递归、迭代)(1,1,2,3,5.....)
c语言·开发语言·笔记·算法·排序算法
Jerry2 小时前
LeetCode 977. 有序数组的平方
算法