English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Java полная коллекция примеров
В этой программе вы узнаете, как использовать циклы for и while в Java для поиска факториала числа.
Факториал положительного числа задается следующим образом:
Факториал 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("Факториал %d = %d", num, factorial); } }
При выполнении этой программы, вывод будет:
Факториал 10 = 3628800
В этом программе мы используем цикл for для遍ения всех чисел между 1 и заданным числом num (10), умножая каждое число до num и храня результат в переменной factorial.
Мы используем long вместо int для хранения больших результатов факториала. Однако, он все еще слишком мал, чтобы хранить значения больших чисел (например, факториал 100)
Для результатов, которые не могут быть сохранены в переменной типа long, мы используем переменную BigInteger, объявленную в библиотеке 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 факториал = %d", num, factorial); } }
При выполнении этой программы, вывод будет:
Факториал 30 = 265252859812191058636308480000000
Здесь мы используем BigInteger вместо long для хранения факториала.
Поскольку * не может быть использован вместе с BigInteger, мы используем multiply() для этого продукта. Кроме того, num должен быть преобразован в BigInteger для умножения.
Потому что * не может быть использован вместе с BigInteger,所以我们使用 multiply() 进行计算。Кроме того, num должен быть преобразован в BigInteger для выполнения умножения.
Таким образом, мы также можем решить эту проблему с помощью цикла 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); } }
При выполнении этой программы, вывод будет:
5 факториал = 120
В上面的 программе, в отличие от цикла for,我们必须在循环体内增加 i значение.
Хотя два программы технически правильны, в этом случае лучше использовать цикл for. Это потому, что количество итераций (максимально num) известно.