English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste programa, você aprenderá a usar loops for e while no Java para encontrar o fatorial de um número.
O fatorial de números positivos é dado por: n
fatorial de n (n!) = 1 * 2 * 3 * 4 * ... * 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("Fatorial de %d = %d", num, factorial); } }
Quando o programa é executado, a saída é:
Fatorial de 10 = 3628800
Neste programa, usamos um loop for para percorrer1e o número dado num(10) todos os números entre eles, cada um dos quais é o produto até num e armazenado na variável factorial.
Usamos long em vez de int para armazenar resultados grandes de fatorial. No entanto, ainda não é suficientemente grande para armazenar valores de números maiores (por exemplo10Fatorial de 0)
Para resultados que não podem ser armazenados em uma variável long, usamos a variável BigInteger declarada na biblioteca 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("Fatorial de %d = %d", num, factorial); } }
Quando o programa é executado, a saída é:
3Fatorial de 0 = 265252859812191058636308480000000
Aqui, usamos BigInteger para armazenar o fatorial.
Devido a*Não pode ser usado juntamente com BigInteger, portanto usamos multiply() para o produto. Além disso, o num deve ser convertido explicitamente para BigInteger para a multiplicação.
Porque*Não pode ser usado com BigInteger, então usamos multiply() para a computação. Além disso, num deve ser convertido para BigInteger para a operação de multiplicação.
Da mesma forma, também podemos usar o loop while para resolver esse problema.
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 Fatorial = %d", num, factorial); } }
Quando o programa é executado, a saída é:
5 Fatorial = 120
No programa acima, diferentemente do loop for, devemos aumentar o valor de i dentro do corpo do loop.
Embora os dois programas sejam tecnicamente corretos, neste caso, é melhor usar um loop for. Isso porque o número de iterações (máximo de num) é conhecido.