Kotlin 求数字阶乘的程序

正数 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)是已知的。

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

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战