Ciao,
avevo scritto questo programma per visualizzare il valore dei fattoriali di tutti i numeri interi minori o uguali di un certo valore immesso dall'utente attraverso la tastiera.
Ecco il listato che ho realizzato:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
int n,aux;
char numero[12];
long long int fat;
printf("\n\tCalcolo del fattoriale di tutti i numeri minori o uguali a N\n");
printf("\nInserisci n: ");
scanf("%s",&numero);
n=atoi(numero);
if ( (strchr(numero,'.')) || (n>-1) ) {
fat=1;
printf("\n0!= 1\n");
for(aux=1;aux<n+1;aux++) {
fat=fat*aux;
printf("%d!= %d\n",aux,fat);
}
}
printf("\n");
}
Il problema e' che nonostante le modifiche fatte (per esempio long long int fat)
per la natura del fattoriale se inserisco un numero anche basso sballa tutto per via dell'overflow credo.
In questi casi come sarebbe meglio impostare il programma?
Edit: mi ero scordato di far vedere l'esempio:
codice:
Calcolo del fattoriale di tutti i numeri minori o uguali a N Inserisci n: 42 0!= 1 1!= 1 2!= 2 3!= 6 4!= 24 5!= 120 6!= 720 7!= 5040 8!= 40320 9!= 362880 10!= 3628800 11!= 39916800 12!= 479001600 13!= 1932053504 14!= 1278945280 15!= 2004310016 16!= 2004189184 17!= -288522240 18!= -898433024 19!= 109641728 20!= -2102132736 21!= -1195114496 22!= -522715136 23!= 862453760 24!= -775946240 25!= 2076180480 26!= -1853882368 27!= 1484783616 28!= -1375731712 29!= -1241513984 30!= 1409286144 31!= 738197504 32!= -2147483648 33!= -2147483648 34!= 0 35!= 0 36!= 0 37!= 0 38!= 0 39!= 0 40!= 0 41!= 0 42!= 0