English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Java

Java управление потоком

Java массив

Java направленный на объекты (I)

Java направленный на объекты (II)

Java направленный на объекты (III)

Обработка исключений Java

Java список (List)

Java Queue (очередь)

Java Map коллекция

Java Set коллекция

Java Ввод/Вывод (I/O)

Java Reader/Writer

Другие темы Java

Java программа для поиска факториала числа

Java полная коллекция примеров

В этой программе вы узнаете, как использовать циклы for и while в Java для поиска факториала числа.

Факториал положительного числа задается следующим образом:

Факториал n (n!) = 1 * 2 * 3 * 4 * ... * n

Пример 1: Использование цикла for для поиска факториала числа

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.

Пример 2: Использование BigInteger для поиска факториала числа

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.

Пример 3: использование цикла 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) известно.

Java полная коллекция примеров