You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现无乘除模运算除法时出现未捕获运行时错误求助

错误原因分析
  • 直接触发运行时错误的原因是类实例方法调用错误:loop是Solution类的成员方法,在divide函数中调用时没有加self.前缀,会触发NameError: name 'loop' is not defined的报错。
  • 逻辑覆盖不全:现有代码只处理了被除数为正的两种场景,没有覆盖被除数为负、被除数为0的情况,未匹配的分支没有返回值,会触发非预期的返回结果。
  • 时间复杂度不达标:现有loop方法采用逐次减除数的逻辑,时间复杂度为O(n),当被除数极大时会直接超时,不符合题目O(logn)的要求。
  • 边界处理缺失:如果被除数为负数,range(a)会生成空序列,loop方法会直接返回0,计算结果完全错误。
修复方案

首先修复直接的运行时错误,再优化时间复杂度、补全逻辑覆盖,修复后的完整代码如下:

class Solution:
    def divide(self, a: int, b: int) -> int:
        # 提前处理结果符号,异或判断是否符号不同
        sign = -1 if (a < 0) ^ (b < 0) else 1
        # 统一转为绝对值计算,避免负数逻辑干扰
        dividend = abs(a)
        divisor = abs(b)
        res = 0
        
        # 位运算实现O(logn)复杂度的除法
        while dividend >= divisor:
            # 找到当前可以一次性减掉的最大除数倍数(除数*2^k)
            temp = divisor
            multiple = 1
            while dividend >= (temp << 1):
                temp <<= 1
                multiple <<= 1
            # 减去对应倍数的除数,商累加对应倍数
            dividend -= temp
            res += multiple
        
        # 应用符号
        res = res * sign
        # 若题目要求符合32位有符号整数范围,可打开下方边界判断
        # return min(max(res, -2**31), 2**31 - 1)
        return res

修复说明

  1. 调整了方法结构,避免了原有的实例方法调用错误。
  2. 采用位运算左移的方式批量计算可减的除数倍数,时间复杂度降到O(logn),完全符合题目要求。
  3. 先统一处理符号,将被除数和除数都转为正数计算,最后再恢复符号,覆盖所有正负组合的场景。
  4. 补全了边界处理逻辑,避免负数、0值场景下的计算错误。

内容的提问来源于stack exchange,提问作者TeraCotta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:54:02