FIBONACCI DE N MUY GRANDE

Iniciado por jgonzalezo, 20 Septiembre 2014, 22:00 PM

0 Miembros y 1 Visitante están viendo este tema.

jgonzalezo

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.

Caster

Por favor, utiliza las etiquetas GeSHi para que tu código sea más legible. Aquí 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.

T. Collins

Cuando dices Fibonacci de 5000, que quiere decir que una serie de 5000 números o hasta el número 5000?

jgonzalezo

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.

jgonzalezo

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í 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

jgonzalezo

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

T. Collins

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.

engel lex

puedes usar GMP par calculos de alta precision

aquí escribí un post al respecto


y aqui una aplicación, calculé cuando lo hice pi a creo que 10 millones de decimales en unos minutos :P

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.