Hola a todos, bueno primero que nada tengo q programar en C un fibonacci que me aguante hasta por lo menos el de 5000 tengo una idea de como poder resolverlo pero no me sale nada a la hora de programarlo, mi idea seria ir guardándolo el resultado cada uno de los dígitos de este en un arreglo de enteros, pero la verdad no se me ocurre como hacerlo, ojala me puedan ayudar, y gracias de ante mano
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a,*puntero,i;
printf("\n\nIngrese el numero para calcular Fibonacci.\n\n");
scanf("%d",&a);
puntero=malloc(sizeof(int));
puntero[0]= 0;
puntero[1]= 1;
for(i=1;i<=a-1;i++) {
puntero[2] = puntero[0]+ puntero[1];
puntero[0] = puntero[1];
puntero[1] = puntero[2];
}
printf("\n\n El Fibonacci de %d es: %d \n\n ",a, puntero[2]);
free(puntero);
system("PAUSE");
return 0;
}
ese es el codigo que llevo, se q no hace lo q pido, pero ojala me puedan dar una nocion o algo, soy nuevo en esto asi q agradeceria si son criticas q sean criticas constructivas.
Por favor, utiliza las etiquetas GeSHi para que tu código sea más legible. Aquí (http://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci#Algoritmos_de_c.C3.A1lculo) mismo tienes explicados algunos algoritmos con los que puedes reducir notablemente el numero de operaciones para hallar los elementos de la sucesión.
Un saludo.
Cuando dices Fibonacci de 5000, que quiere decir que una serie de 5000 números o hasta el número 5000?
Hola, emm tengo claro como funciona lo funcion fibonacci y su algoritmo, deseo calcular fibonacci(5000) "fibonacci de 5000" se que el problema del algoritmo basico es que no hay tipo de dato que me aguante dicho resultado, es por eso que habia pensado en representar los resultados que vayan surgiendo en un arreglo de enteros donde cada digito del numero fuese una posicion de dicho arreglo, y simplemente ir guardando los dos anteriores ya que fibonacci necesita los dos anteriores para representar el del siguiente numero, espero haber sido un poco mas claro.
Cita de: Caster en 20 Septiembre 2014, 22:44 PM
Por favor, utiliza las etiquetas GeSHi para que tu código sea más legible. Aquí (http://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci#Algoritmos_de_c.C3.A1lculo) mismo tienes explicados algunos algoritmos con los que puedes reducir notablemente el numero de operaciones para hallar los elementos de la sucesión.
Un saludo.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a,*puntero,i;
printf("\n\nIngrese el numero para calcular Fibonacci.\n\n");
scanf("%d",&a);
puntero=malloc(sizeof(int));
puntero[0]= 0;
puntero[1]= 1;
for(i=1;i<=a-1;i++) {
puntero[2] = puntero[0]+ puntero[1];
puntero[0] = puntero[1];
puntero[1] = puntero[2];
}
printf("\n\n El Fibonacci de %d es: %d \n\n ",a, puntero[2]);
free(puntero);
system("PAUSE");
return 0;
}
perdon soy nuevo en este foro
Cita de: T. Collins en 20 Septiembre 2014, 22:51 PM
Cuando dices Fibonacci de 5000, que quiere decir que una serie de 5000 números o hasta el número 5000?
fibonacci de 5000 pero es un numero que no puede ser guardado en ninguna variable de ningun tipo
Mírate esto: http://www.cquestions.com/2010/08/multiplication-of-large-numbers-in-c.html
Tendrás que hacer una función que sume dos números cuyas cifras se guardan en un array de chars.
puedes usar GMP par calculos de alta precision
aquí escribí un post al respecto
(http://foro.elhacker.net/programacion_cc/duda_matematica_de_precision_arbitraria-t412080.0.html;msg1933292)
y aqui una aplicación (http://foro.elhacker.net/programacion_cc/calculo_de_pi_en_alta_precision_aporte-t412338.0.html), calculé cuando lo hice pi a creo que 10 millones de decimales en unos minutos :P