alli pruebo... aunque con una funcion se podria hacer mas facilmente...
salu2,
ben
PD: con que estas compilando...
Hola, bueno ahí les dejo un programa que hice en C/C++ para calcular el factorial de números grandes.
Saludos.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; }
alli pruebo... aunque con una funcion se podria hacer mas facilmente...
salu2,
ben
PD: con que estas compilando...
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
si si entiendo, pero nunca use g++, yo uso devC++
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