原文: https://www.programiz.com/kotlin-programming/examples/hcf-gcd
在此程序中,您将学习在 Kotlin 中查找两个数字的 GCD。 这是通过在if else
语句的帮助下使用while
循环来完成的。
两个整数的 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("GCD of $n1 and $n2 is $gcd")
}
运行该程序时,输出为:
GCD of 81 and 153 is 9
这里,将要找到其 GCD 的两个数字分别存储在n1
和n2
中。
然后,执行while
循环,直到i
小于n1
和n2
为止。 这样,迭代 1 到两个数字中最小的所有数字以找到 GCD。
如果将n1
和n2
都除以i
,则将gcd
设置为该数字。 一直进行到找到最大数(GCD)为止,该数将n1
和n2
均除而无余数。
与 Java 不同,您不能在条件循环中使用for
循环来解决此问题。 以下是等效的 Java 代码:查找两个数字的 GCD 的 Java 程序。
在 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("GCD = $n1")
}
运行该程序时,输出为:
GCD = 9
这是查找 GCD 的更好方法。 在此方法中,从较大的整数中减去较小的整数,然后将结果分配给保存较大整数的变量。 继续该过程,直到n1
和n2
相等为止。
仅当用户输入正整数时,以上两个程序才能按预期工作。 这是第二个示例的一些修改,可以找到正整数和负整数的 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("GCD = $n1")
}
运行该程序时,输出为:
GCD = 9