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:
Il problema e' che nonostante le modifiche fatte (per esempio long long int fat)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"); }
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

Rispondi quotando