计算一个数的阶乘的 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 循环。这是因为迭代次数是已知的。