Java程序找出两个数字的最大公约数
要理解这个示例,你应该具备以下 Java 编程 主题的知识:
两个整数的最大公约数(HCF 或 GCD)是能够完全整除这两个数(没有余数)的最大整数。
示例 1:使用 for 循环和 if 语句找出两个数字的最大公约数
class Main {
public static void main(String[] args) {
// 找出 n1 和 n2 的最大公约数
int n1 = 81, n2 = 153;
// 初始设定为 gcd
int gcd = 1;
for (int i = 1; i <= n1 && i <= n2; ++i) {
// 检查 i 是否能够完全整除 n1 和 n2
if (n1 % i == 0 && n2 % i == 0)
gcd = i;
}
System.out.println(n1 + " 和 " + n2 + " 的最大公约数是 " + gcd);
}
}
输出
81 和 153 的最大公约数是 9
在这里,需要找出 GCD 的两个数字分别存储在 n1
和 n2
中。
然后,执行一个 for 循环直到 i
小于 n1
和 n2
。这样,就能迭代出 1 到这两个数中较小的数之间的所有数字,以找到 GCD。
如果 n1
和 n2
都可以被 i
整除,gcd
就设置为这个数字。这个过程一直进行,直到找到最大的数字(GCD),它能够在没有余数的情况下整除 n1
和 n2
。
我们也可以使用 while 循环解决这个问题,如下所示:
示例 2:使用 while 循环和 if else 语句找出两个数字的最大公约数
class Main {
public static void main(String[] args) {
// 找出 n1 和 n2 的最大公约数
int n1 = 81, n2 = 153;
while(n1 != n2) {
if(n1 > n2) {
n1 -= n2;
}
else {
n2 -= n1;
}
}
System.out.println("最大公约数: " + n1);
}
}
输出
最大公约数: 9
这是找出 GCD 的更好方法。在这种方法中,较小的整数从较大的整数中减去,结果赋给持有较大整数的变量。这个过程一直进行,直到 n1
和 n2
相等。
以上两个程序只有在用户输入正整数时才能正常工作。下面是对第二个示例的一点修改,以便找出正整数和负整数的最大公约数。
示例 3:正整数和负整数的最大公约数
class GCD {
public static void main(String[] args) {
int n1 = 81, n2 = -153;
// 始终设为正数
n1 = ( n1 > 0) ? n1 : -n1;
n2 = ( n2 > 0) ? n2 : -n2;
while(n1 != n2) {
if(n1 > n2) {
n1 -= n2;
}
else {
n2 -= n1;
}
}
System.out.println("最大公约数: " + n1);
}
}
输出
最大公约数:
9