Vous n'avez pas besoin d'un tableau pour stocker tous ces nombres, vous pouvez vous en sortir en stockant les deux derniers termes de la séquence, puisque c'est tout ce dont vous avez besoin pour calculer le prochain terme.
Lorsque vous essayez d'allouer autant d'espace sur la pile, vous demandez des problèmes car la pile est une ressource relativement limitée.
En fait, ce code exact entré dans gcc
sur une machine Linux me donne une violation de segmentation quand j'essaye de l'exécuter, précisément pour cette raison.
En plus de cela, votre code est pas obtenir les termes même valeur, il se fait chaque terme, et vous obtenez les premiers quatre millions de valeurs, plutôt que les valeurs inférieures à quatre millions qui a été spécifié.
Le genre de code que vous êtes après ressemblera à ceci:
#include <stdio.h>
int main (void) {
// Accumulator and terms (acc is zero because first two terms are odd).
int acc = 0, t1 = 1, t2 = 1, t3;
// Continue until next term is 4mil or more.
while ((t3 = t1 + t2) < 4000000) {
// printf ("DEBUG: %d %d %d %s\n", t1, t2, t3,
// ((t3 % 2) == 0) ? "<<" : "");
// Accumulate only even terms.
if ((t3 % 2) == 0) acc += t3;
// Cycle through terms.
t1 = t2; t2 = t3;
}
// Print the accumulated value.
printf ("%d\n", acc);
return 0;
}
Et la sortie:
4613732
Si vous testez ce programme en décochant commentant la déclaration de débogage, vous voyez :
DEBUG: 1 1 2 <<
DEBUG: 1 2 3
DEBUG: 2 3 5
DEBUG: 3 5 8 <<
DEBUG: 5 8 13
DEBUG: 8 13 21
DEBUG: 13 21 34 <<
DEBUG: 21 34 55
DEBUG: 34 55 89
DEBUG: 55 89 144 <<
DEBUG: 89 144 233
DEBUG: 144 233 377
DEBUG: 233 377 610 <<
DEBUG: 377 610 987
DEBUG: 610 987 1597
DEBUG: 987 1597 2584 <<
DEBUG: 1597 2584 4181
DEBUG: 2584 4181 6765
DEBUG: 4181 6765 10946 <<
DEBUG: 6765 10946 17711
DEBUG: 10946 17711 28657
DEBUG: 17711 28657 46368 <<
DEBUG: 28657 46368 75025
DEBUG: 46368 75025 121393
DEBUG: 75025 121393 196418 <<
DEBUG: 121393 196418 317811
DEBUG: 196418 317811 514229
DEBUG: 317811 514229 832040 <<
DEBUG: 514229 832040 1346269
DEBUG: 832040 1346269 2178309
DEBUG: 1346269 2178309 3524578 <<
4613732
et, si vous additionnez tous les numéros pairs à la fin de ces lignes DEBUG
, vous avez en effet la valeur donnée.
S'il vous plaît ne vous une faveur et d'améliorer l'empreinte et l'utilisation des espaces et nommage des variables. De même, vous n'utilisez rien de déclaré dans '', donC#include n'est que du spam. –
pmg
Quelle est la sortie? Qu'attendez-vous? – eduffy
N'utilisez pas Dev-C++! C'est un projet mort depuis très longtemps et livré avec un ancien compilateur. – ThiefMaster