#include <stdlib.h>
#include <stdio.h>
int main(){
int n, cont, fib, na = 0, nb = 1, sum_even = 0;
printf ("Insert a number and I'll tell you the respective Fibonacci: ");
scanf ("%d", &n);
for (cont = 1; cont < n; cont++) {
na += nb;
nb = na - nb;
fib = na + nb;
if (fib % 2 == 0) {
sum_even += fib;
}
}
printf ("%d\n", sum_even);
return 0;
}
我試圖做歐拉項目Problem 2,然後我想出了這個代碼。問題是:由於內存溢出,我無法找到斐波那契數列超過400或更近的數字的總和。因此,我不能解決這個問題,因爲它要求在斐波那契序列中找到低於4000000的對數之和。誰能幫我?我試圖使用浮點型數字來增加答案的容量,它似乎工作到一千年左右,但如果我嘗試使用更大的數字,我得到一個在15秒後在bash中的-nan錯誤的處理(我真的不知道它是什麼意思)。C中的內存溢出
#include <stdlib.h>
#include <stdio.h>
int main() {
int n, cont, div;
float sum_even = 0, na = 0, nb = 1, fib;
printf ("Insert a number and I'll tell you the respective Fibonacci: ");
scanf ("%d", &n);
for (cont = 1; cont <= n; cont++) {
na += nb;
nb = na - nb;
fib = na + nb;
div = fib/2;
if (div % 2 == 0) {
sum_even += fib;
}
}
printf ("%f\n", sum_even);
return 0;
}
是的。我也在回答同樣的問題。但是也許需要很長的時間,然而int需要。 – Aslan986
這裏不需要'fib(34)= 5702887> 4000000',所以總和很容易適合32位int。以後有很多問題需要64位整數。 –
謝謝!現在我明白了我的錯誤。無論如何,我要看看這些長整數,雙倍和東西。我對編程還很陌生,所以我一點都不瞭解。 –