💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 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`)是已知的。 访问此页面以学习*使用递归*查找数字的阶乘。