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

C#中int数组转整数时Lambda函数返回错误结果的原因

问题原因及解决办法

核心问题:整数溢出

C#里的int是32位有符号整数,最大值仅为2147483647,而你要计算的目标值9876543210远大于这个上限。用int存储计算结果时会触发整数溢出,溢出后数值会按补码规则循环,最终得到错误的1286608618。

当数组长度为9时,最大结果是987654321,刚好小于2147483647,所以能正常运行;添加第10位元素后数值超出int范围,就出现了错误。

另外你代码里用Math.Pow(浮点运算)转int还存在潜在精度问题——比如Math.Pow(10,9)理论值是1000000000,但浮点运算可能产生微小误差,转int时可能导致数值偏差。


解决办法

方法1:改用long类型存储结果

long是64位有符号整数,最大值为9223372036854775807,完全能容纳9876543210。同时建议用纯整数运算避免浮点误差:

int[] digits = new int[] { 9,8,7,6,5,4,3,2,1,0 };
// 更稳妥的整数累加方式
long bignumber = 0;
foreach (int digit in digits)
{
    bignumber = bignumber * 10 + digit;
}

方法2:超大型数值用BigInteger

如果数组长度超过19位(超出long范围),可以用System.Numerics.BigInteger处理任意大小的整数:

using System.Numerics;

int[] digits = new int[] { 9,8,7,6,5,4,3,2,1,0,9,8,7 };
string numStr = string.Join("", digits);
BigInteger bigNumber = BigInteger.Parse(numStr);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:10:32