You need to enable JavaScript to run this app. 为什么LeetCode最大蛋糕面积题中间结果要先转long再强转int返回?
优惠活动
大模型
产品
解决方案
定价
更多

为什么LeetCode最大蛋糕面积题中间结果要先转long再强转int返回?

问题解答

核心原因是32位int类型的整数溢出

C++中主流编译器的32位int类型取值范围为 -2147483648 ~ 2147483647,也就是最大只能容纳约21亿的正整数。

这道题的输入参数h、w最高可达1e9量级,所以计算得到的最大横向间隔horizontal、最大纵向间隔vertical最高都能接近1e9:

  • 如果你直接用两个int值做乘法:两个1e9相乘的结果是1e18,远远超过int的最大取值范围,会触发有符号整数溢出。这在C++标准中属于未定义行为,会出现结果错误、运行时崩溃等异常,也就是你遇到的运行时错误。
  • 代码里先转long的逻辑:C++算术运算会自动把操作数提升到两个操作数中精度更高的类型,64位long类型的最大取值约为9e18,完全可以容纳两个1e9相乘的结果,只要把操作数强转成long再做乘法就不会溢出。后续做完两次取模运算后,结果已经小于MOD(100000007),远小于int的最大值,最后转回int就不会有任何问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 11:51:00