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

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

#### 在此程序中，您将学习在 Kotlin 中使用`for`和`while`循环查找数字的阶乘。 您还将学习使用范围来解决此问题。

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

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

```

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

```kt
fun main(args: Array<String>) {

    val num = 10
    var factorial: Long = 1
    for (i in 1..num) {
        // factorial = factorial * i;
        factorial *= i.toLong()
    }
    println("Factorial of $num = $factorial")
}
```

运行该程序时，输出为：

```kt
Factorial of 10 = 3628800
```

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

与 Java 不同，在 Kotlin 中，您可以使用*范围运算符*（`1..num`）创建*从 1 到`num`之间的数字范围*。

另外，我们使用`Long`代替了`int`来存储较大的阶乘结果。

但是，它仍然不足以存储较大数字（例如 100）的值。 对于不能存储在长变量中的结果，我们使用在`java.math`库中声明的`BigInteger`变量。

以下是等效的 Java 代码：[查找数字的阶乘的 Java 程序](/java-programming/examples/factorial)。

* * *

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

```kt
import java.math.BigInteger

fun main(args: Array<String>) {

    val num = 30
    var factorial = BigInteger.ONE
    for (i in 1..num) {
        // factorial = factorial * i;
        factorial = factorial.multiply(BigInteger.valueOf(num.toLong()))
    }
    println("Factorial of $num = $factorial")
}
```

运行该程序时，输出为：

```kt
Factorial of 30 = 205891132094649000000000000000000000000000000
```

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

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

* * *

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

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

```kt
fun main(args: Array<String>) {

    val num = 5
    var i = 1
    var factorial: Long = 1
    while (i <= num) {
        factorial *= i.toLong()
        i++
    }
    println("Factorial of $num = $factorial")
}
```

运行该程序时，输出为：

```kt
Factorial of 5 = 120
```

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

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

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