Skip to content

Latest commit

 

History

History
104 lines (70 loc) · 2.84 KB

File metadata and controls

104 lines (70 loc) · 2.84 KB

Kotlin 程序:查找数字的阶乘

原文: https://www.programiz.com/kotlin-programming/examples/factorial

在此程序中,您将学习在 Kotlin 中使用forwhile循环查找数字的阶乘。 您还将学习使用范围来解决此问题。

正数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

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

与 Java 不同,在 Kotlin 中,您可以使用范围运算符1..num)创建从 1 到num之间的数字范围

另外,我们使用Long代替了int来存储较大的阶乘结果。

但是,它仍然不足以存储较大数字(例如 100)的值。 对于不能存储在长变量中的结果,我们使用在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(num.toLong()))
    }
    println("Factorial of $num = $factorial")
}

运行该程序时,输出为:

Factorial of 30 = 205891132094649000000000000000000000000000000

在这里,我们使用BigInteger变量阶乘代替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)是已知的。

访问此页面以学习使用递归查找数字的阶乘。