两个整数的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的两个数分别存储在n1和n2中。
然后,执行一个while循环,直到i小于n1和n2。这样,就迭代了1到两个数中较小数之间的所有数字来查找GCD。
如果n1和n2都能被i整除,那么gcd就被设置为该数字。这个过程一直持续到找到能整除n1和n2且无余数的最大数字(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的更好方法。在此方法中,将较小的整数从较大的整数中减去,并将结果赋给保存较大整数的变量。此过程一直持续到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("G.C.D = $n1")
}
运行程序后,输出将是
G.C.D = 9