题目
从标准输入读入两个正整数 a 和 b,使用辗转相除法求最大公约数,并在控制台逐步打印出每一步的除法带余运算过程。
输入格式:一行输入两个正整数 a 和 b,以空格分隔。
输出格式:逐步打印每轮的 被除数 = 除数 * 商 + 余数,最后输出最大公约数结果。
数据范围与约定:1 ≤ a, b ≤ 109。
思路与算法
1. 辗转相除过程跟踪
每轮计算中,商为 q = a / b,余数为 r = a % b。输出格式化字符串 %d = %d * %d + %d。
2. 迭代推进
打印完成后更新 a = b; b = r;,直到余数 r == 0 终止,此时的被除数即最终 GCD。
完整程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int x = a, y = b;
// 逐步展示欧几里得辗转相除过程:被除数 / 除数 = 商 ... 余数
while (y != 0) {
System.out.println(x + " / " + y + " = " + (x / y) + " ... " + (x % y));
int t = x % y;
x = y;
y = t;
}
System.out.println("gcd = " + x);
}
}运行示例
输入:
48 18输出:
48 / 18 = 2 ... 12
18 / 12 = 1 ... 6
12 / 6 = 2 ... 0
gcd = 6