程序:
import java.util.Scanner;
import java.util.regex.Pattern;
public class number {
public int num1;
public int num2;
public int num3;
//辗转相除法求最大公因数
public int div() {
int a, b, c;
a = num1;
b = num2;
while (a % b != 0) {
c = a%b;
a = b;
b = c;
}
return b;
}
//辗转相减法求最大公因数
public int sub() {
int a, b;
a = num1;
b = num2;
while (a != b) {
if (a > b) {
a = a - b;
} else b = b - a;
}
return b;
}
//穷举法求最大公因数
public int qju() {
int a, b, temp;
a = num1;
b = num2;
if (a > b) temp = b;
else temp = a;
while (a % temp != 0 || b % temp != 0) {
temp--;
}
return temp;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
number n = new number(); //创建对象
int d, s, q; //分别是3种方法求出的最大公约数
String m1, m2; //输入的两个数
boolean n1 = false, n2 = false; //进行输入数字判断时的参数
//判断输入第一个数是否有问题
while (!n1) {
System.out.println("请输入第1个数");
m1 = in.next();
Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
n1 = pattern.matcher(m1).matches();
if (n1 == true) {
int temp = Integer.parseInt(m1);
if (temp > 0) n.num1 = temp;
else {
n1 = false;
System.out.println("输入有误,请重新输入:");
}
}
else System.out.println("输入有误,请重新输入:");
}
//判断输入第二个数是否有问题
while (!n2) {
System.out.println("请输入第2个数");
m2 = in.next();
Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
n2 = pattern.matcher(m2).matches();
if (n2 == true) {
int temp = Integer.parseInt(m2);
if (temp > 0) n.num2 = temp;
else {
n2 = false;
System.out.println("输入有误,请重新输入:");
}
}
}
d = n.div();
s = n.sub();
q = n.qju();
System.out.println("辗转相除法求出来" + n.num1 + "和" + n.num2 + "的最大公约数为" + d);
System.out.println("辗转相减法求出来" + n.num1 + "和" + n.num2 + "的最大公约数为" + s);
System.out.println("穷举法求出来" + n.num1 + "和" + n.num2 + "的最大公约数为" + q);
System.out.println("辗转相除法求出来" + n.num1 + "和" + n.num2 + "的最小公倍数为" + n.num1 * n.num2 / d);
System.out.println("辗转相减法求出来" + n.num1 + "和" + n.num2 + "的最小公倍数为" + n.num1 * n.num2 /s);
System.out.println("穷举法求出来" + n.num1 + "和" + n.num2 + "的最小公倍数为" + n.num1 * n.num2 / q);
}
}
求两个数的最大公约数和最小公倍数(3种算法)
最新推荐文章于 2025-06-30 12:25:16 发布