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

大数字数组输入时plusOne函数返回错误结果的原因

问题分析:大数字数组加1后末尾出现0的原因及修复方案

核心原因

1. JavaScript整数精度溢出

JavaScript中的Number类型是双精度浮点数,它能精确表示的最大整数是2^53 - 1(即9007199254740991)。你输入的数组对应的数字是6145390195186705543,这个数值已经超出了JS的安全整数范围。当用parseInt(digits.join(''))转换时,JS无法精确存储这个大数字,会自动截断末尾的有效数字,导致数值变成类似6145390195186705000的近似值,加1后自然保留了末尾的0。

2. split方法调用错误

你的代码中num.toString().split()没有传入参数,默认会按空白字符分割字符串,但num.toString()返回的是无空格的数字字符串,所以split后得到的是仅包含整个数字字符串的数组。后续join(',')会把这个数组转成带逗号的字符串,但这一步本身逻辑错误,正确的分割单个字符应该用split('')。不过这不是导致末尾0的主要原因,核心还是精度溢出问题。

修复方案:直接操作数组处理进位

避免将数组转成整数,直接从数组末尾开始处理加1和进位逻辑,这样完全不会有精度问题:

var plusOne = function(digits) {
    // 从最后一位开始遍历
    for (let i = digits.length - 1; i >= 0; i--) {
        digits[i] += 1;
        // 如果当前位加1后不等于10,说明没有进位,直接返回
        if (digits[i] !== 10) {
            return digits;
        }
        // 有进位则当前位设为0,继续向前处理
        digits[i] = 0;
    }
    // 如果所有位都进位了(比如输入是[9,9,9]),在开头添加1
    digits.unshift(1);
    return digits;
};

测试验证

用你提供的输入[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]测试,该函数会正确返回[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,4]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:35:19