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
)是已知的。
访问此页面以了解如何使用递归来查找数字的阶乘。