我有一张素数的清单,最多可达2000 000。这是一个包含近15万个非常大整数的列表。我要里面所有数字的总和。下面是一个大整数的随机列表,以供演示:
List<int> numbers = new List<int>();
for (int i = 0; i < 100; i++)
{
numbers.Add(1000000000);
}
Console.WriteLine(numbers.Sum().ToString());我得到了一个“算术运算导致溢出”异常。我想这个总和太大了,但是把它转换成Int64没有帮助,它仍然抛出相同的异常。
Console.WriteLine(Convert.ToUInt64(numbers.Sum()).ToString());我甚至尝试将和保存到Int64变量中,然后使用它,但这也不起作用。
long sum = numbers.Sum();
Console.WriteLine(sum.ToString());是否有任何数据类型可以容纳这么大的数字,或者我是否在其他地方犯了错误?谢谢你的帮助。
发布于 2018-10-03 18:04:49
问题是你的答案是超过26.5亿美元。将int更改为Int64
List<Int64> numbers = new List<Int64>();
for (int i = 0; i < 100; i++)
{
numbers.Add(1000000000);
}
Console.WriteLine(numbers.Sum().ToString());要澄清的是,Int的最大值大约为26.5亿,而Int64在数万亿美元之内
发布于 2018-10-03 18:02:58
在得到求和之前,尝试转换为Int64 (long):
Console.WriteLine(numbers.Select(x=> (long)x).Sum().ToString());发布于 2018-10-03 18:06:33
您可以使用Aggregate方法:
Console.WriteLine(numbers.Aggregate(0L, (c, n) => c + n));这个过载的Aggregate以累加器作为第一个参数
文字0L将被视为long,而不是int。这将使您免于算术溢出。
https://stackoverflow.com/questions/52633126
复制相似问题