正数 n 的阶乘由下式给出:
factorial of 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("Factorial of $num = $factorial")
}
运行程序后,输出将是
Factorial of 10 = 3628800
在此程序中,我们使用for循环遍历从1到给定数字num(10)的所有数字,并将每个数字直到num的乘积存储在变量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("Factorial of $num = $factorial")
}
运行程序后,输出将是
Factorial of 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("Factorial of $num = $factorial")
}
运行程序后,输出将是
Factorial of 5 = 120
在上面的程序中,与for循环不同,我们必须在循环体内部增加i的值。
虽然两个程序在技术上都是正确的,但在此情况下最好使用 for 循环。因为迭代次数(最多 num)是已知的。
访问此页面以了解*如何使用递归查找数字的阶乘*。