class fibo {
//int firstNumber = 0;
public static void main(String args[]){
//int firstNumber = 0;
int length = 4000000;
int[] series = new int[length];
//long[] sum = new long[4000000];
long sum =0;
series[0] = 0;
series[1] = 1;
for (int i = 2; i<4000000; i++){
//firstNumber = firstNumber + i;
//System.out.println("fibo" + i);
series[i] = series[i-1] + series[i-2];
if(series[i] %2 == 0) {
sum = sum + series[i];
}
}
for(int j=0;j<length; j++){
System.out.println("fibo Series" + series[j]);
}
}
}
我得到了答案,但方法不同。这段代码有什么问题?任何人都可以对此有所了解。
相同的代码在长度为10时有效。我没有对此进行任何考虑,但答案似乎有所不同。它的东西-92719184589087346是不正确的。
答案 0 :(得分:4)
这段代码出了什么问题?
嗯,它取的是前四百万斐波纳契数中偶数的总和,不斐波那契数字序列中的偶数不到四百万。
它也创建了一个包含所有斐波那契数字的数组,无缘无故:你一次只需要最后两个,所以你可以在恒定的空间内做到这一点。
答案 1 :(得分:0)
我猜你正试图得到总和少于400万的总和?因为那不是你在计算的东西。你正在计算第四百万分之一的总和,这是完全不同的。
你的答案错误的原因(除了你的逻辑错误)是长期不能适合你正在计算的数字。斐波纳契序列中的第400万个条目是一个非常大的数字,它会溢出你的长。溢出将使它回绕到底片中(可能多次)。