我试图解决Project Euler 问题 #2:找到斐波那契数列的偶数项之和,最高可达 4,000,000。例如:最多 1000,总和为 2+8+34+144+610 = 798。
现在,我的算法是从 2 开始添加每三个斐波那契数 - 因为每三个斐波那契数必然会遵循以下逻辑:
偶数:E,奇数:O,
O+E=O E+O=O O+O=E
1+2=3 2+3=5 5+3=8 (example)
所以,我写了下面的代码来找出答案..
#include<stdio.h>
#define LT 4000000
int main()
{
double i0,i1,sum=0,cycle,eSum=2,status=1;
i0 = 1;
i1 = 2;
while(i1<LT && status == 1)
{
for(cycle=3;cycle>0;cycle--)
{
sum=i0+i1;
i0=i1;
i1=sum;
if((i1+i0)>LT)
{
status = 0;
break;
}
}
eSum+=(status == 1)?sum:0;
}
printf("\nThe required Answer: %8.0f\n",eSum);
return 0;
}
现在,它对于LT = 1000可以正常工作,但是对于需要 LT=4,000,000 的问题,程序会显示错误的值1089154,而不是正确的值4613732。
我无法弄清楚这段代码有什么问题。另外,我不明白它如何在 LT=1000 上正常工作,但对于更大的数字却不行。我是否遗漏了一些令人尴尬的显而易见的东西?请帮忙..