# Java 程序：查找数字的阶乘

> 原文： [https://www.programiz.com/java-programming/examples/factorial](https://www.programiz.com/java-programming/examples/factorial)

#### 在此程序中，您将学习使用 Java 中的`for`和`while`循环查找数字的阶乘。

正数`n`的阶乘由下式给出：

```java
factorial of n (n!) = 1 * 2 * 3 * 4 * ... * n

```

## 示例 1：使用`for`循环查找数字的阶乘

```java
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);
    }
}
```

运行该程序时，输出为：

```java
Factorial of 10 = 3628800
```

在此程序中，我们使用循环来循环遍历 1 至给定数字`num`（10）之间的所有数字，并将每个数字的乘积存储在变量`factorial`，直到`i <= num`。

我们使用了`long`而不是`int`来存储较大的阶乘结果。 但是，它仍然不足以存储较大数字（例如 100）的值。

对于不能存储在长变量中的结果，我们使用在`java.math`库中声明的`BigInteger`变量。

## 示例 2：使用`BigInteger`查找数字的阶乘

```java
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);
    }
}
```

运行该程序时，输出为：

```java
Factorial of 30 = 265252859812191058636308480000000
```

在这里，我们使用`BigInteger`变量阶乘代替`long`。

由于`*`不能与`BigInteger`一起使用，因此我们将`multiply()`用于产品。 同样，应将`number`强制转换为`BigInteger`以进行乘法。

* * *

同样，我们也可以使用`while`循环来解决此问题。

## 示例 3：使用`while`循环查找数字的阶乘

```java
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);
    }
}
```

运行该程序时，输出为：

```java
Factorial of 5 = 120
```

在上面的程序中，与`for`循环不同，我们必须在循环体内增加`i`的值。

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

访问此页面以学习*使用递归*查找数字的阶乘。