Факториал числа в Java — программа через цикл for

Факториал натурального числа n (записывается как n!) — это произведение всех целых чисел от 1 до n. Например, 5! = 1 × 2 × 3 × 4 × 5 = 120. Факториал нуля по соглашению равен 1.

В Java факториал удобно вычислять с помощью циклов. Покажем три способа решения этой задачи.

Пример 1: с использованием цикла for

В этом примере мы пробегаем по всем числам от 1 до num с помощью цикла for и накапливаем их произведение в переменной factorial.

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("Factorial of %d = %d", num, factorial);
    }
}

Вывод:

Factorial of 10 = 3628800

В этой программе цикл for перебирает все числа от 1 до заданного num (10), а произведение всех чисел до num сохраняется в переменной factorial.

Мы используем тип long вместо int, чтобы хранить большие значения факториала. Однако даже long не справится с по-настоящему большими числами (например, для 100!).

Совет

Если результат не помещается в long, используйте класс BigInteger из библиотеки java.math — он умеет работать с целыми числами любой длины.

Пример 2: вычисление факториала с помощью BigInteger

Здесь вместо long используется 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("Factorial of %d = %d", num, factorial);
    }
}

Вывод:

Factorial of 30 = 265252859812191058636308480000000

Примечание

Оператор * не работает с BigInteger, поэтому для умножения используется метод multiply(). Значение i нужно сначала преобразовать в BigInteger с помощью BigInteger.valueOf(i).

Пример 3: вычисление факториала с помощью цикла while

Этот вариант делает то же самое, но через цикл while. Переменную-счётчик i приходится увеличивать вручную внутри тела цикла.

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("Factorial of %d = %d", num, factorial);
    }
}

Вывод:

Factorial of 5 = 120

В отличие от for, при использовании while приращение счётчика i выполняется вручную внутри тела цикла.

Совет

Обе версии корректны, но когда количество итераций известно заранее (как здесь — до num), удобнее использовать цикл for.