题目:输入两个正整数num1与num2,求其最大公约数和最小公倍数。
思想:在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。
求最大公约数方法:
public int gys(int num1 ,int num2) {
int k = num1 %num2;
while(k != 0) {
num1 = num2;
num2 = k;
k = num1%num2;
}
return num2;
}
求最小公倍数的方法:
public int gbs(int num1,int num2) {
return num1*num2/gys(num1,num2);
}
打印输出的方法:
public void print(int num1,int num2) {
Test t = new Test();
System.out.println("最大公约数为:"+ t.gys(num1, num2));
System.out.println("最小公倍数:" + t.gbs(num1, num2));
}
附上完整代码:
import java.util.Scanner;
public class Test {
public int gys(int num1 ,int num2) {
int k = num1 %num2;
while(k != 0) {
num1 = num2;
num2 = k;
k = num1%num2;
}
return num2;
}
public int gbs(int num1,int num2) {
return num1*num2/gys(num1,num2);
}
public void print(int num1,int num2) {
//创建一个对象,调用gbs()和gys()方法;
Test t = new Test();
System.out.println("最大公约数为:"+ t.gys(num1, num2));
System.out.println("最小公倍数:" + t.gbs(num1, num2));
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s = new Scanner(System.in);
int num1 = s.nextInt();
int num2 = s.nextInt();
//创建一个对象,目的调用print方法
Test t = new Test();
//这里考虑到num1与num2大小关系
//求余数的式子:m % n = k;
//较大的数作为m,j较小的数作为n
if(num1 > num2) {
t.print(num1, num2);
}else if(num1 < num2) {
t.print(num2, num1);
}
}
}