计算一个数的阶乘的 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("Factorial of %d = %d", num, factorial);
    }
}

输出

Factorial of 10 = 3628800

在这个程序中,我们使用 for 循环遍历 1 和给定数字 num (10) 之间的所有数字,将所有的数相乘并将结果存储在一个变量 factorial 中.

我们用了 long 类型变量存储阶乘的结果。但是,它仍然不足以存储更大数字(比如 100 的阶乘)。

对于不能存储在 long 变量中的结果,我们可以使用在 java.math 包中的 BigInteger 类型的变量。

示例 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);
    }
}

输出

Factorial of 30 = 265252859812191058636308480000000

在这里, 我们使用 BigInteger 变量阶乘代替 long 类型。

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

输出

Factorial of 5 = 120

在上面的程序中,与 for 循环不同,我们必须增加在 while 循环体内部增加 i

尽管这两个程序在技术上都是正确的,但在这种情况下最好使用 for 循环。这是因为迭代次数是已知的。