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

Python中round()函数计算不符预期及LeetCode提交失败问题排查

问题排查与优化方案

问题分析

你的代码存在两个核心问题:

  1. 取整逻辑不符合需求:round()是四舍五入取整,但你需要的是向零截断取整(舍去小数部分,保留与原数符号一致的整数)。虽然部分用例看似正常,但本质逻辑不对,且浮点数运算可能带来精度误差。
  2. 32位整数溢出未处理:LeetCode的整数除法题目通常限定为32位有符号整数范围([-2^31, 2^31-1]),当被除数为-2147483648、除数为-1时,结果为2147483648,超出了32位有符号整数的最大值2147483647,必须单独处理这种溢出情况。

另外,原代码中dividend/divisor在Python3中返回浮点数,导致返回值是3.0这类浮点数,不符合题目对整数类型的要求。

优化方案

核心思路

  • 用向零取整替代四舍五入:通过整数运算避免浮点数精度问题,正数间的整数除法//是向下取整,配合符号判断可实现向零取整。
  • 提前拦截溢出场景:当被除数是-2^31且除数是-1时,直接返回2^31-1。
  • 符号分离处理:先计算结果的符号,再对绝对值进行除法运算,简化逻辑。

优化后的代码

class Solution(object):
    def divide_integer(self, dividend, divisor):
        # 32位有符号整数范围定义
        INT_MIN = -2147483648
        INT_MAX = 2147483647
        
        # 处理唯一的溢出情况
        if dividend == INT_MIN and divisor == -1:
            return INT_MAX
        
        # 计算结果的符号:异或运算判断两数符号是否不同
        sign = -1 if (dividend < 0) ^ (divisor < 0) else 1
        
        # 转为绝对值运算,避免负数除法的复杂逻辑
        abs_dividend = abs(dividend)
        abs_divisor = abs(divisor)
        
        # 正数间的整数除法//实现向下取整,符合向零取整需求
        res = abs_dividend // abs_divisor
        
        # 恢复符号并确保结果在合法范围内
        res = res * sign
        return max(min(res, INT_MAX), INT_MIN)

if __name__ == "__main__":
    p = 7
    t = -3
    dividend = 10
    divisor = 3
    print(Solution().divide_integer(p, t))  # 输出-2
    print(Solution().divide_integer(dividend, divisor))  # 输出3
    print(Solution().divide_integer(-2147483648, -1))  # 输出2147483647

代码说明

  1. 溢出拦截:单独处理dividend=-2147483648且divisor=-1的场景,直接返回INT_MAX,避免结果超出范围。
  2. 符号计算:用异或运算快速判断被除数和除数的符号是否不同,确定最终结果的符号。
  3. 绝对值运算:将两个数转为正数后用//做整数除法,正数间的//是向下取整,正好匹配向零取整的需求,最后再恢复符号。
  4. 范围兜底:用max(min(res, INT_MAX), INT_MIN)确保结果始终落在32位有符号整数范围内,避免其他极端情况的溢出。

原代码失败原因

  • round()逻辑不符:对于-2.333这类数,round()返回-2看似正确,但如果是-3.6,round()会返回-4,不符合向零取整的要求。
  • 浮点数精度问题:处理极大数-2147483648时,转为浮点数可能丢失精度,导致计算结果偏差。
  • 溢出未处理:-2147483648 / -1得到2147483648.0,超出32位有符号整数上限,被LeetCode判定为错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:06:04