数组中的正整数求和为负数

时间:2014-07-10 13:58:36

标签: c# arrays negative-number sum-of-digits

我有这段代码:

int[] primes = generatePrimes(bound);

int sum = 0;
for (int i = 0; i < primes.GetLength(0); i++)
{
    if (sum < 0)
    {
        Console.WriteLine(sum);
    }
    sum += primes[i];
}

我已经检查过以确保我的数组&#34;素数&#34;只包含正整数:

if (primes[i] < 0)
{
    Console.WriteLine(primes[i]);
}

但什么都不打印。但是,由于某种原因,总和有时会是负数,并且在我运行第一段代码时会打印出来。阵列的长度是148933.我不太了解C#,但我认为长度在这里不重要? :S

如果有人知道为什么会这样,我会非常感谢任何帮助。

3 个答案:

答案 0 :(得分:6)

  

数组的长度是148933。

很可能你的总和超过了int ( - 2,147,483,648到2,147,483,647)的可能值,这就是你看到负数的原因。

使用long进行总和计算。但您可能需要BigInteger来计算总和。

答案 1 :(得分:0)

前21000个素数的总和是2 368 647 159(根据Wolfram Alpha)。该值不适合32位有符号整数。它将显示为负数。

前148933个素数的总和是142 913 828 922.这可以表示为64位整数。

无论你在32位数字中计算的总和是错误的,根据幅度可能是正数还是负数。

答案 2 :(得分:-1)

if (primes[i] < 0)
    {
        Console.WriteLine(primes[i]);
    }

这不能确保数组中只有正数,它只会让你知道何时有一个负数。

如果您不想在总和中包含底片,请尝试以下操作:

for (int i = 0; i < primes.GetLength(0); i++)
{
    if (sum >= 0)
    {
        sum += primes[i];
    }
}