Kotlin 求两个数字最大公约数的程序

两个整数的HCF或GCD是能整除两个数(无余数)的最大整数。

示例1:使用while循环查找两个数的GCD

fun main(args: Array<String>) {
    val n1 = 81
    val n2 = 153
    var gcd = 1

    var i = 1
    while (i <= n1 && i <= n2) {
        // Checks if i is factor of both integers
        if (n1 % i == 0 && n2 % i == 0)
            gcd = i
        ++i
    }

    println("G.C.D of $n1 and $n2 is $gcd")
}

运行程序后,输出将是

G.C.D of 81 and 153 is 9

在这里,需要查找GCD的两个数分别存储在n1n2中。

然后,执行一个while循环,直到i小于n1n2。这样,就迭代了1到两个数中较小数之间的所有数字来查找GCD。

如果n1n2都能被i整除,那么gcd就被设置为该数字。这个过程一直持续到找到能整除n1n2且无余数的最大数字(GCD)。

与Java不同,您不能为此问题使用带有条件的for循环。这是等效的Java代码: Java程序查找两个数的GCD


在Kotlin中,查找GCD有更好的替代方法,如下所示

示例2:查找两个数的GCD(更好的替代方案)

fun main(args: Array<String>) {
    var n1 = 81
    var n2 = 153

    while (n1 != n2) {
        if (n1 > n2)
            n1 -= n2
        else
            n2 -= n1
    }

    println("G.C.D = $n1")
}

运行程序后,输出将是

G.C.D = 9

这是查找GCD的更好方法。在此方法中,将较小的整数从较大的整数中减去,并将结果赋给保存较大整数的变量。此过程一直持续到n1n2相等为止。

上述两个程序仅在用户输入正整数时才按预期工作。这里对第二个示例进行了一点修改,以查找正数和负数GCD。


示例3:正数和负数的GCD

fun main(args: Array<String>) {
    var n1 = 81
    var n2 = -153

    // Always set to positive
    n1 = if (n1 > 0) n1 else -n1
    n2 = if (n2 > 0) n2 else -n2

    while (n1 != n2) {
        if (n1 > n2)
            n1 -= n2
        else
            n2 -= n1
    }

    println("G.C.D = $n1")
}

运行程序后,输出将是

G.C.D = 9
你觉得这篇文章有帮助吗?

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

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

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