English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Programma Java per trovare il factorial di un numero
In questo programma, imparerai a trovare il factorial di un numero utilizzando i cicli for e while in Java.
Il factorial di un numero positivo è dato da: n!
public class Factorial { public static void main(String[] args) { int num = 10; long factorial = 1; for(int i = 1; i <= num; ++i) { // factorial = factorial * i; factorial *= i; } System.out.printf("Factoriale di %d = %d", num, factorial) } }
Quando si esegue questo programma, l'output è:
Factoriale di 10 = 3628800
In questo programma, utilizziamo un ciclo for per percorrere tutti i numeri tra 1 e il numero dato num (10), moltiplicando ogni numero fino a num e memorizzandolo nella variabile factorial.
Usiamo long invece di int per memorizzare il risultato grande del factorial. Tuttavia, non è abbastanza grande per memorizzare il valore di numeri più grandi (ad esempio, il factorial di 100)
Per risultati che non possono essere memorizzati in una variabile long, utilizziamo la variabile BigInteger dichiarata nella libreria java.math.
import java.math.BigInteger; public class Factorial { public static void main(String[] args) { int num = 30; BigInteger factorial = BigInteger.ONE; for(int i = 1; i <= num; ++i) { // factorial = factorial * i; factorial = factorial.multiply(BigInteger.valueOf(i)) } System.out.printf("%d del factorial = %d", num, factorial) } }
Quando si esegue questo programma, l'output è:
Il factorial di 30 = 265252859812191058636308480000000
Qui, utilizziamo BigInteger per memorizzare il factorial.
Poiché * non può essere utilizzato con BigInteger, utilizziamo multiply() per questo prodotto. Inoltre, num deve essere convertito in BigInteger per la moltiplicazione forzata.
Poiché * non può essere utilizzato con BigInteger, utilizziamo multiply() per il calcolo. Inoltre, num deve essere convertito in BigInteger per l'operazione di moltiplicazione.
Allo stesso modo, possiamo anche risolvere questo problema utilizzando un ciclo while.
public class Factorial { public static void main(String[] args) { int num = 5, i = 1; long factorial = 1; while(i <= num) { factorial *= i; i++; } System.out.printf("%d! = %d", num, factorial); } }
Quando si esegue questo programma, l'output è:
5! = 120
Nel programma sopra, diversamente dal ciclo for, dobbiamo aumentare il valore di i all'interno del ciclo.
Anche se entrambi i programmi sono tecnicamente corretti, in questo caso è meglio utilizzare un ciclo for. Questo è perché il numero di iterazioni (massimo num) è noto.