Java作业——求最大公约数——更相减损术
虽然算法简单,但是因为很不熟练,所以一开始的代码有较多错误,以下是经过多次修改后的代码。
代码:
import java.util.Scanner;
public class subsubAlgorithm {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入两个数字:");
int a = sc.nextInt();
int b = sc.nextInt();
subsub(a, b);
// if(a % 2 == 0) { a = a / 2; }
// if(b % 2 == 0) { b = b / 2; }
}
public static void subsub(int a, int b) {
int i = 0;
int c = 0;
for(; a%2 == 0 && b % 2 == 0; i ++) {
a = a / 2;
b = b / 2;
} //更相减损术第一步:若二者为偶数,则除2,并记录被2除的次数
while(a != b) {
if(a > b) {
a -= b;
} else {
b -= a;
}
} //主体,大数减小数,循环,直到两数相等为止
if(i != 0) {
c = b * i * 2;
}else {
c = b;
} //增加了条件判断,防止i==0的情况出现,从而得出公约数为0的错误结果
System.out.println("最大公约数 = " + c);
}
}
本代码验证了:
a = 996, b = 700
a = 1995, b = 615
a = 81, b = 999
等情况,似乎均可得出正确结果。但是算法仍不完美,欢迎验证并告诉我。