正数 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)是已知的。
另请阅读