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

在此程序中,您将学习在 Kotlin 中查找两个数字的 GCD。 这是通过在if else语句的帮助下使用while循环来完成的。

两个整数的 HCF 或 GCD 是可以完全除以两个数(没有余数)的最大整数。

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

  1. fun main(args: Array<String>) {
  2. val n1 = 81
  3. val n2 = 153
  4. var gcd = 1
  5. var i = 1
  6. while (i <= n1 && i <= n2) {
  7. // Checks if i is factor of both integers
  8. if (n1 % i == 0 && n2 % i == 0)
  9. gcd = i
  10. ++i
  11. }
  12. println("GCD of $n1 and $n2 is $gcd")
  13. }

运行该程序时,输出为:

  1. GCD of 81 and 153 is 9

这里,将要找到其 GCD 的两个数字分别存储在n1n2中。

然后,执行while循环,直到i小于n1n2为止。 这样,迭代 1 到两个数字中最小的所有数字以找到 GCD。

如果将n1n2都除以i,则将gcd设置为该数字。 一直进行到找到最大数(GCD)为止,该数将n1n2均除而无余数。

与 Java 不同,您不能在条件循环中使用for循环来解决此问题。 以下是等效的 Java 代码:查找两个数字的 GCD 的 Java 程序


在 Kotlin 中找到 GCD 的更好方法如下:

示例 2:找到两个数字的 GCD(更好的替代方法)

  1. fun main(args: Array<String>) {
  2. var n1 = 81
  3. var n2 = 153
  4. while (n1 != n2) {
  5. if (n1 > n2)
  6. n1 -= n2
  7. else
  8. n2 -= n1
  9. }
  10. println("GCD = $n1")
  11. }

运行该程序时,输出为:

  1. GCD = 9

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

仅当用户输入正整数时,以上两个程序才能按预期工作。 这是第二个示例的一些修改,可以找到正整数和负整数的 GCD。


示例 3:正数和负数的 GCD

  1. fun main(args: Array<String>) {
  2. var n1 = 81
  3. var n2 = -153
  4. // Always set to positive
  5. n1 = if (n1 > 0) n1 else -n1
  6. n2 = if (n2 > 0) n2 else -n2
  7. while (n1 != n2) {
  8. if (n1 > n2)
  9. n1 -= n2
  10. else
  11. n2 -= n1
  12. }
  13. println("GCD = $n1")
  14. }

运行该程序时,输出为:

  1. GCD = 9