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

LeetCode与本地Python解释器计算结果不一致问题求助

LeetCode 1283《Find The Smallest Divisor》:math.ceil(i/mid)提交失败的原因分析

核心问题:浮点数精度误差

你遇到的问题本质是浮点数运算的精度损失导致math.ceil(i/mid)计算出错,而-(-i//mid)用纯整数运算完全避免了这个问题。

  • math.ceil(i/mid)的逻辑是先做浮点数除法i/mid,再对结果向上取整。但当i和mid的数值很大时(比如接近Python浮点数的精度上限2^53),浮点数无法精确表示所有整数,会出现近似值。例如某个整数结果会被存储成略小于它的浮点数,这时候math.ceil就会返回错误的数值,导致总和s计算偏差,最终二分查找得到错误的除数。
  • -(-i//mid)是纯整数运算:i//mid是Python的地板除法(向下取整),对正整数来说,-i//mid会得到向下取整后的负数,再取负就等价于向上取整。整个过程没有浮点数参与,完全不会有精度损失,结果绝对准确。

关于账号提交差异的解释

朋友用他的账号提交你的原代码能通过,只是刚好没触发那些包含大数的极端测试用例。LeetCode的测试用例执行可能存在一定的随机性或者覆盖范围差异,你的账号提交时刚好命中了触发浮点数精度问题的测试用例,导致结果错误。

代码对比

原代码关键行(存在风险):

s += math.ceil(i/mid)

修改后可靠的代码:

s += -(-i//mid)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:04:52