Поиск факториала числа

Поиск факториала числа

Факториал положительного числа п дан кем-то:

факториал 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("Factorial of %d = %d", num, factorial);
    }
}

Выход

Факториал 10 = 3628800

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

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

Для результатов, которые нельзя сохранить в длинной переменной, мы используем 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("Factorial of %d = %d", num, factorial);
    }
}

Выход

Факториал 30 = 265252859812191058636308480000000

Здесь, вместо того long, мы используем BigIntegerпеременный факториал.

Поскольку, *нельзя использовать с BigInteger, мы вместо этого используем multiply()для продукта. Также,числоследует преобразовать в 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("Factorial of %d = %d", num, factorial);
    }
}

Выход

Факториал 5 = 120

В приведенной выше программе, в отличие от цикла for, мы должны увеличивать значение я внутри тела петли.

Хотя обе программы технически правильны, в этом случае лучше использовать цикл for. Это потому, что количество итераций (до num) известен.