在此程序中,您將學(xué)習(xí)在Kotlin中查找兩個數(shù)字的最大公因數(shù)。這是通過在if else語句的幫助下使用while循環(huán)來完成的。
兩個整數(shù)的HCF或GCD是可以精確地將兩個數(shù)相除(沒有余數(shù))的最大整數(shù)。
fun main(args: Array<String>) {
val n1 = 81
val n2 = 153
var gcd = 1
var i = 1
while (i <= n1 && i <= n2) {
//檢查i是否是兩個整數(shù)的因數(shù)
if (n1 % i == 0 && n2 % i == 0)
gcd = i
++i
}
println("$n1和$n2的最大公因數(shù)是 $gcd")
}運(yùn)行該程序時,輸出為:
81 和 153 的最大公因數(shù)是 9 9
在此,將要找到其最大公因數(shù)的兩個數(shù)字分別存儲在n1和n2中。
然后,執(zhí)行for循環(huán),直到i小于n1和n2為止。這樣,迭代1到兩個數(shù)字中最小的所有數(shù)字以找到最大公因數(shù)。
如果n1和n2都可被i整除,則將gcd設(shè)置為數(shù)字。 一直進(jìn)行到找到最大數(shù)(GCD),該數(shù)將n1和n2均除而無余數(shù)。
與Java不同,您不能使用帶有條件的for循環(huán)來解決此問題。以下是等效的Java代碼:查找兩個數(shù)字的GCD的Java程序。
在Kotlin中找到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")
}運(yùn)行該程序時,輸出為:
G.C.D = 9
這是查找GCD的更好方法。在此方法中,從較大的整數(shù)中減去較小的整數(shù),然后將結(jié)果分配給保存較大整數(shù)的變量。這個過程一直持續(xù)到n1和n2相等。
僅當(dāng)用戶輸入正整數(shù)時,以上兩個程序才能按預(yù)期工作。這是第二個示例的一些修改,可以找到正整數(shù)和負(fù)整數(shù)的GCD。
fun main(args: Array<String>) {
var n1 = 81
var n2 = -153
//始終為正數(shù)
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")
}運(yùn)行該程序時,輸出為:
G.C.D = 9