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

LeetCode Add Two Numbers II:用unsigned __int128仍出错的原因排查

问题原因分析:unsigned __int128溢出导致计算错误

核心问题是unsigned __int128的数值范围不足以容纳测试用例中的超大整数,具体细节如下:

  • unsigned __int128是128位无符号整数,最大值为2^128 - 1,换算成十进制约为3.4×10^38,最多能表示38位的十进制数。
  • 你的测试用例中:
    • l1对应的是61位十进制数,数值量级达到10^60,远超unsigned __int128的存储上限;
    • l2对应的是64位十进制数,数值量级达到10^63,完全超出了128位无符号整数的范围。
  • 当尝试将这类超大整数存入unsigned __int128时,会发生溢出截断——实际存储的是原数对2^128取模后的结果,后续基于这个错误数值求和、转回链表,自然会得到和预期不符的结果。

正确思路提示

要处理这类超大数相加问题,不能依赖数值类型直接存储,应该利用链表/栈的特性从低位开始计算:

  • 方案一:先反转两个输入链表,从低位到高位逐位相加(类似LeetCode基础版Add Two Numbers),最后反转结果链表得到正确顺序;
  • 方案二:用栈分别存储两个链表的所有数字,弹出时从低位开始相加,依次构建结果链表。

内容的提问来源于stack exchange,提问作者Jovan Dejanović

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:23:12