Java 程序:查找数字的阶乘

要理解此示例,您应了解以下Java编程主题


正数 n 的阶乘由下式给出:

factorial of 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)之间的所有数字,并将每个数字直到 num 的乘积存储在变量 factorial 中。

我们使用 long 而不是 int 来存储阶乘的大结果。但是,它仍然不足以存储较大数字(例如 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 变量 factorial,而不是 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循环不同,我们必须在循环体内部增加i的值。

虽然两个程序在技术上都是正确的,但在此情况下最好使用 for 循环。因为迭代次数(最多 num)是已知的。


另请阅读

在我们结束之前,让我们用 Java 程序查找数字阶乘的知识来测试一下!您能解决以下挑战吗?

挑战

编写一个函数来计算一个数字的阶乘。

  • 非负整数 n 的阶乘是所有小于或等于 n 的正整数的乘积。
  • 返回输入 num 的计算阶乘。
  • 例如,如果 num = 5,则预期输出为 **120**(即 5 * 4 * 3 * 2 * 1 = 120)。
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战