Fattoriale di numeri grandi in c
ciao vorrei sapere come posso fare per scrivere un programma che calcoli il fattoriale di numeri grandi... con il seguente codice #include
int main()
{
int n, i;
long int fatt = 1;
printf("Inserisci un numero : ");
scanf("%d",&n);
for (i = 1; i <= n; i++)
fatt = fatt * i;
printf("Il fattoriale di %d e' %ld\n", n, fatt);
return 0;
}
riesco a calcolarmi il fattoriale fino verso 40 mentre usando programmi tipo mathematica si può andare ben oltre
int main()
{
int n, i;
long int fatt = 1;
printf("Inserisci un numero : ");
scanf("%d",&n);
for (i = 1; i <= n; i++)
fatt = fatt * i;
printf("Il fattoriale di %d e' %ld\n", n, fatt);
return 0;
}
riesco a calcolarmi il fattoriale fino verso 40 mentre usando programmi tipo mathematica si può andare ben oltre
Risposte
Questo argomento è stato trattato ad nauseam nel forum. In futuro ti suggerisco di utilizzare la funzione di ricerca del forum in modo da evitarti la scrittura del post e risolvere il problema più velocemente. Ne abbiamo per esempio discusso a fondo nella seguente discussione: c++;lib.
In breve, il tipo long in C è in grado di rappresentare numeri a 32 o 64 bit a seconda del sistema e del compilatore usato. Questo significa che non è in grado di rappresentare valori superiori a \(2^{31}-1\) o \(2^{63}-1\) a seconda dei casi (ricordati che stai inoltre usando un tipo con segno..). Mi stupisce che tu riesca a calcolare il fattoriale di \(40\) che è
\[ 815915283247897734345611269596115894272000000000. \]
Per andare oltre è necessario utilizzare strutture dati e algoritmi particolari. Se sei interessato ad usare numeri molto grandi, il mio consiglio è quello di usare linguaggi diversi o librerie già disponibili come GMP (che dovrebbe essere quella che usa Mathematica).
In breve, il tipo long in C è in grado di rappresentare numeri a 32 o 64 bit a seconda del sistema e del compilatore usato. Questo significa che non è in grado di rappresentare valori superiori a \(2^{31}-1\) o \(2^{63}-1\) a seconda dei casi (ricordati che stai inoltre usando un tipo con segno..). Mi stupisce che tu riesca a calcolare il fattoriale di \(40\) che è
\[ 815915283247897734345611269596115894272000000000. \]
Per andare oltre è necessario utilizzare strutture dati e algoritmi particolari. Se sei interessato ad usare numeri molto grandi, il mio consiglio è quello di usare linguaggi diversi o librerie già disponibili come GMP (che dovrebbe essere quella che usa Mathematica).
in realtà riesco fino 34.. grazie