跳到主要内容

Kotlin 程序:找出一个数字的阶乘

正整数 n 的阶乘可以表示为:

n的阶乘 (n!) = 1 * 2 * 3 * 4 * ... * n

示例1:使用for循环查找数字的阶乘

fun main(args: Array<String>) {

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

当您运行该程序时,输出如下:

10 的阶乘 = 3628800

在此程序中,我们使用for循环遍历了1到给定数字 num(10)之间的所有数字,将每个数字的乘积存储在变量 factorial 中。

与Java不同,在Kotlin中,您可以使用 范围 (1..num) 和 in 运算符循环遍历从1到 num 的数字。

此外,我们使用 long 而不是 int 来存储阶乘的大结果。

但是,它仍然不足以存储更大的数字的值(比如100)。对于无法存储在long 变量中的结果,我们使用在 java.math 库中声明的 BigInteger 变量。

以下是等效的Java代码:Java程序:查找数字的阶乘

示例2:使用BigInteger查找数字的阶乘

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(i.toLong()))
}
println("$num 的阶乘 = $factorial")
}

当您运行该程序时,输出如下:

30 的阶乘 = 265252859812191058636308480000000

在这里,我们使用了 BigInteger 变量 factorial,而不是 long

由于 * 不能与 BigInteger 一起使用,因此我们使用 multiply() 来进行乘法操作。此外,应将 num 强制转换为 BigInteger 进行乘法运算。

同样,我们也可以使用while循环来解决这个问题。

示例3:使用while循环查找数字的阶乘

fun main(args: Array<String>) {

val num = 5
var i = 1
var factorial: Long = 1
while (i <= num) {
factorial *= i.toLong()
i++
}
println("$num 的阶乘 = $factorial")
}

当您运行该程序时,输出如下:

5 的阶乘 = 120

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

虽然这两个程序在技术上都是正确的,但在这种情况下最好使用for循环。这是因为迭代次数(达到 num)是已知的。

访问此页面以了解如何使用递归来查找数字的阶乘。