我正在尝试解决第二个Euler问题(计算所有偶数Fibonacci数的总和<4百万),到目前为止我已经想出了这个:
public class CCTrial1 {
public static void fib(){
long a = 0, b = 1;
long c = 0, sum = 0;
int i = 1;
long even = 0;
while(i < 400000){
c = a + b;
sum = c;
a = b;
b = c;
if(sum %2 == 0){
even += sum;
}
i++;
}
System.out.println("Count " +i);
System.out.println("Last Fib no " +sum);
System.out.println("Sum " +even);
}
public static void main (String[] args){
fib();
}
}
我把它改成了很长时间,但仍然有溢出。你能告诉我哪里出错了吗?
答案 0 :(得分:2)
问题涉及Fibonacci术语少于400万,而不是前400万斐波那契术语。
例如,第35,36和37个斐波纳契数是5702887,9227465和14930352;问题陈述将它们全部排除在考虑之外,因为它们都大于4000000。
答案 1 :(得分:1)
如果你想计算400万以下的所有斐波纳契数,你不应该循环400万次。第4百万个斐波那契数量大约为10 ^ 835950,这远远超出了你的范围。
你只需要做一会儿直到a + b> = 4百万。
答案 2 :(得分:0)
只需打印出所有数字,然后查看溢出的位置。通过这种方式,您可以看到您无法获得前400万斐波纳契术语。您可以从this link获取更多斐波纳契信息。