我正在从Eurler的页面解决问题。实际上,我花了大量时间尝试对我的代码进行处理。它会正确输出斐波那契数字,并对其求和(15个数字)。但是,当我将限制设置为4 000 000个数字时,它显示的输出为:-1833689714。我将int更改为uint或large,但答案仍然不正确。 这是问题的链接:https://projecteuler.net/problem=2https://projecteuler.net/problem=2
这是我的代码:
class Program
{
static void Main(string[] args)
{
int a = 0;
int b = 1;
int fibonacciNumber = 0;
int sum=0;
bool whichNumber = false;
for(int i = 0; i < 4000000; i++)
{
fibonacciNumber = a + b;
if (fibonacciNumber % 2 == 0) sum += fibonacciNumber; //adding to sum of even-numbers
if (whichNumber == false) //operations to change numbers
{
a = fibonacciNumber;
whichNumber = true;
}
else if (whichNumber == true)
{
b = fibonacciNumber;
whichNumber = false;
}
}
Console.WriteLine(sum);
Console.ReadLine();
}
}
有人看到我在哪里犯错了吗?
答案 0 :(得分:4)
尝试使用long
而不是int
。这将需要您执行更多的步骤,但又会受到限制。如果您想要非常大的数字,则需要一种可以处理它们的类型,例如BigInteger。
答案 1 :(得分:2)
再次阅读问题。您无需将前四百万斐波纳契数相加。只有少于四百万的数字。
您将不得不更改实现,但是您不需要像BigInteger
,int
这样的较大数据类型。
答案 2 :(得分:-1)
看起来您的sum
变量需要为long
。该值大于int
可以容纳的值。