Resultados 1 al 5 de 5

Tema: Calcular factorial de numeros grandes

  1. #1
    Dragonauta en Proceso
    Fecha de ingreso
    Nov 2008
    Ubicación
    /home/alguien
    Mensajes
    86
    Gracias
    11
    Agradecido 23 veces en 15 Mensajes

    Predeterminado Calcular factorial de numeros grandes

    Hola, bueno ahí les dejo un programa que hice en C/C++ para calcular el factorial de números grandes.

    Código:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define MAX 100
    
    struct GranNumb {
    	int *v;
    	int n;
    };
    
    GranNumb granprod(GranNumb fact_1, GranNumb fact_2) {
    	int *v, n;
    	n = (fact_1.n > fact_2.n) ? 2*fact_1.n : 2*fact_2.n;
    	v = new int[n];
    	
    	for(int i=0; i<n; i++) v[i] = 0;
    	
    	for(int i=0; i<fact_1.n; i++) {
    		for(int j=0; j<fact_2.n; j++) {
    			int prod = fact_1.v[i] * fact_2.v[j] + v[i+j];
    			int u = prod % 10;
    			int d = prod / 10;
    			v[i+j] = u;
    			v[i+j+1] += d;
    		}
    	}
    	
    	GranNumb gn;
    	gn.n = 0;
    	gn.v = v;
    	
    	for(int i=n-1; i>=0; i--) {
    		if(v[i] != 0) {
    			gn.n=i+1;
    			break;
    		}
    	}
    	
    	return gn;
    }
    
    GranNumb grandec(GranNumb gn) {
    	int *v = new int [gn.n];
    	for(int i=0; i<gn.n; i++) v[i] = gn.v[i];
    	
    	if(gn.n == 0) {
    		return gn;
    	} else {
    		for(int i=0; i<gn.n; i++) {
    			if(v[i] == 0) {
    				v[i] = 9;
    			} else {
    				v[i]--;
    				break;
    			}
    		}
    	}
    
    	GranNumb dec;
    	dec.n = 0;
    	dec.v = v;
    	for(int i=gn.n-1; i>=0; i--) {
    		if(v[i] != 0) {
    			dec.n=i+1;
    			break;
    		}
    	}
    	return dec;
    }
    
    
    GranNumb granfact(GranNumb gn) {
    	if( gn.n == 0) {
    		GranNumb uno;
    		uno.n = 1;
    		uno.v = new int[1];
    		uno.v[0] = 1;
    		return uno;
    	} else {
    		return granprod(gn, granfact(grandec(gn)));
    	}
    }
    
    
    
    int main() {
    	char s[MAX];
    	
    	printf("Ingresar N: ");
    	scanf("%s", s);
    
    	GranNumb gn;
    	gn.n = strlen(s);
    	gn.v = new int[gn.n];
    	for(int i=0; i<gn.n; i++) gn.v[i] = (int)s[gn.n-1-i] - 48; //convierte caracter en cifra
    	
    	GranNumb fact = granfact(gn);
    		
    	for(int i=fact.n-1; i>=0; i--) {
    		printf("%d", fact.v[i]);
    	}
    	printf("\n");
    	
    	return 0;
    }
    Saludos.
    Alguien <[email protected]>
    http://alguienenlafisi.blogspot.com
    Root-Node

  2. #2
    Recien Nacido
    Fecha de ingreso
    Mar 2010
    Ubicación
    la RED
    Mensajes
    36
    Gracias
    7
    Agradecido 2 veces en 2 Mensajes

    Predeterminado

    alli pruebo... aunque con una funcion se podria hacer mas facilmente...

    salu2,
    ben

    PD: con que estas compilando...
    www.bengeekside.blogspot.com

    Un simple y curioso apasionado por la seguridad informatica y el rock!


  3. #3
    Dragonauta en Proceso
    Fecha de ingreso
    Nov 2008
    Ubicación
    /home/alguien
    Mensajes
    86
    Gracias
    11
    Agradecido 23 veces en 15 Mensajes

    Predeterminado

    Hola bendroide, compilo con g++

    $ g++ factorial.cpp -o factorial

    Luego

    $ ./factorial

    Si tienes otra solución al mismo problema (calcular factorial de números grandes) seria bueno que la compartas

    Saludos
    Alguien <[email protected]>
    http://alguienenlafisi.blogspot.com
    Root-Node

  4. #4
    Recien Nacido
    Fecha de ingreso
    Mar 2010
    Ubicación
    la RED
    Mensajes
    36
    Gracias
    7
    Agradecido 2 veces en 2 Mensajes

    Predeterminado

    si si entiendo, pero nunca use g++, yo uso devC++
    www.bengeekside.blogspot.com

    Un simple y curioso apasionado por la seguridad informatica y el rock!


  5. #5
    Recien Nacido
    Fecha de ingreso
    Nov 2012
    Mensajes
    3
    Gracias
    1
    Agradecido 0 veces en 0 Mensajes

    Predeterminado

    Gracias por el codigo Hay una fórmula que permite calcular APROXIMADAMENTE el factorial, de modo que a mayor n será mejor la aproximación. Se llama fórmula de Stirling n! ≈ √(2.π.n) . (n / e)^n Saludosss

Visitantes encuentran esta página buscando por:

numeros grandes en c

numeros grandes para imprimir

factorial de numeros grandes en c

factorial de 100 en c

factoriales grandes

factoriales en c

factorial de numeros grandes

calcular factoriales grandes

codigo c para calcular el factorial de un numero grande

factorial numeros grandes

numeros factorialesimprimir numeros grandesfactorial de numeros grandes c calcular factorial en cfactoriales numeros grandesfactorial numeros grandes cprograma en c para calcular factorialnumeros extensosfactorial en c numeros grandescalcular numeros grandesnumeros para imprimir grandesimprimir el factorial en cimprimir factoriales c numeros grandes c imprimir numeros grandes en c

Etiquetas para este tema

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •