60 lines
2.2 KiB
C#
60 lines
2.2 KiB
C#
namespace fattoriale_somma;
|
|
|
|
class Program
|
|
{
|
|
static void Main(string[] args)
|
|
{
|
|
//dichiarazione e inizializzazione variabili
|
|
int num;
|
|
ulong fattoriale, somma;
|
|
//inizio programma
|
|
//input e input sanitization
|
|
do{
|
|
Console.Write("Inserire un numero: ");
|
|
num=Convert.ToInt32(Console.ReadLine());
|
|
if(num<0){
|
|
Console.WriteLine("Il numero non può essere negativo");
|
|
}
|
|
else if(num>65){//Gestione dell'overflow, se viene inserito num>65 viene restituito 0, ovviamente è scorretto
|
|
Console.WriteLine("Il numero inserito è troppo grande");
|
|
}
|
|
}
|
|
while(num<0 || num>65);
|
|
//gestione caso 0 e 1
|
|
if (num<=1){
|
|
fattoriale=1;
|
|
}
|
|
else{
|
|
fattoriale=Convert.ToUInt64(num);
|
|
//ciclo calcolo fattoriale
|
|
int i=2;
|
|
while(i<num){//inizio a eseguire i prodotti da due in modo da saltare la moltiplicazione per 1
|
|
somma=0;//resetto somma per inserirci il valore della moltiplicazione intermedia
|
|
int j=0;
|
|
// eseguo "fattoriale * i" con una serie di somme
|
|
while(j<i){
|
|
somma=somma+fattoriale;
|
|
j++;
|
|
}
|
|
fattoriale=somma; // assegna il risultato della "moltiplicazione" alla variabile fattoriale
|
|
i++;
|
|
}
|
|
//^^^^Per fare questo ciclo ho chiesto aiuto a dei miei amici
|
|
//Questo di seguito è il ciclo che avevo scritto da solo
|
|
/*for(i=1; i>num-1; i--){
|
|
//calcolo fattoriale
|
|
Console.WriteLine(fattoriale);
|
|
Console.WriteLine(i);
|
|
fattorialeSupporto=fattoriale;
|
|
for(j=i; j>0; j--){
|
|
fattorialePrec=fattoriale;
|
|
fattoriale=fattorialeSupporto+fattorialePrec;
|
|
Console.WriteLine(fattoriale);
|
|
}*/
|
|
}
|
|
//output finale
|
|
Console.Write("Il fattoriale di " +num);
|
|
Console.WriteLine(" è " +fattoriale);
|
|
}
|
|
}
|