import java.util.InputMismatchException;
import java.util.Scanner;
public class GcdLcmCalculator {
// 计算最大公约数(欧几里得算法)
public static int calculateGCD(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
// 计算最小公倍数(基于GCD的数学公式)
public static int calculateLCM(int a, int b) {
return (a / calculateGCD(a, b)) * b; // 先除后乘防止溢出
}
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
int num1 = 0, num2 = 0;
// 输入验证循环(第一个数)
while (true) {
try {
System.out.print("请输入第一个正整数(>0): ");
num1 = scanner.nextInt();
if (num1 <= 0) {
System.out.println("错误:必须输入大于0的整数!");
} else {
break;
}
} catch (InputMismatchException e) {
System.out.println("错误:请输入有效的整数!");
scanner.nextLine(); // 清除错误输入
}
}
// 输入验证循环(第二个数)
while (true) {
try {
System.out.print("请输入第二个正整数(>0): ");
num2 = scanner.nextInt();
if (num2 <= 0) {
System.out.println("错误:必须输入大于0的整数!");
} else {
break;
}
} catch (InputMismatchException e) {
System.out.println("错误:请输入有效的整数!");
scanner.nextLine(); // 清除错误输入
}
}
// 计算结果
int gcd = calculateGCD(num1, num2);
int lcm = calculateLCM(num1, num2);
// 格式化输出
System.out.println("\n计算结果:");
System.out.printf("数字 %d 和 %d%n", num1, num2);
System.out.printf("最大公约数 (GCD): %d%n", gcd);
System.out.printf("最小公倍数 (LCM): %,d%n", lcm);
}
}
}