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

C++链表逆序转数字函数reverseNum返回值异常问题排查

链表逆序转数字返回结果错误:预期4321实际得到4320

问题原因

你的reverseNum函数中使用了pow()函数计算10的幂次,但pow()是浮点数运算函数,存在精度误差。以链表1->2->3->4为例:

  • 遍历到最后一个节点(值为1)时,pow(10,3)的实际计算结果可能是999.9999999999999,而非精确的1000
  • 该值与1相乘后得到999.9999999999999,赋值给int类型变量时会被截断为999
  • 最终总和为4 + 30 + 200 + 999 = 4320,与预期的4321不符

解决方案

放弃使用pow(),改用整数乘法累积位数,完全避免浮点数精度问题。修改后的reverseNum函数如下:

int reverseNum(Node *head){
    int ans=0;
    int multiplier=1; // 初始为10^0

    while (head!=nullptr){
        ans += head->data * multiplier; 
        cout<<ans<<"-";
        multiplier *= 10; // 每次循环升级为下一个10的幂次

        head=head->next;
    }

    return ans;
}

原理说明

整数乘法是精准运算,multiplier会依次变为1、10、100、1000...,对应10的0次、1次、2次、3次幂,这样计算出来的每一位贡献值都是精确的,最终结果会正确返回4321。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:58:25