跳到主要内容

Java程序找出一个数字的阶乘

要理解这个示例,你应该具备以下 Java 编程 主题的知识:

正数 n 的阶乘定义为:

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 仍然不够大。

对于无法存储在 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("%d 的阶乘 = %d", num, factorial);
}
}

输出

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("%d 的阶乘 = %d", num, factorial);
}
}

输出

5 的阶乘 = 120

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

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

访问此页面学习 使用递归求一个数的阶乘