练习题:键盘输入两个正整数求两个数的最大公约数和最小公倍数
公约数:几个数公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数。
公倍数:几个数公有的倍数,叫做这几个数的公倍数;其中最小的一个,叫做这几个数的最小公倍数。
思路:
1、创建Scanner对象,调用扫描方法获取键盘录入的数据
2、自定义一个类,定义四个成员变量,两个变量作为构造方法进行接受和传递,另外两个用于接收得到的数据
3、定义两个成员方法获取最大公约数和最小公倍数
4、创建自定义的类类型对象,把键盘录入的数据作为构造方法的参数
代码实现:
package test; import java.util.Scanner; public class DivisorDemo { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入两个正整数"); System.out.println("请输入第一个正整数"); int x=sc.nextInt(); System.out.println("请输入第二个正整数"); int y=sc.nextInt(); maxDivisorMinMultiple mdmm=new maxDivisorMinMultiple(x,y); int maxDivisor=mdmm.maxDivisor(x,y); int minMultiple=mdmm.minMultiple(x,y); System.out.println("最大公约数是:"+maxDivisor); System.out.println("最小公倍数是:"+minMultiple); } } class maxDivisorMinMultiple{ private int m,n; private int divisor, multiple;//定义公约数和公倍数 public maxDivisorMinMultiple(int m,int n){ if(m>n){ //用m记录住最大数,用于计算最小公倍数和最大公约数 this.m=m; this.n=n; }else{ this.m=n; this.n=m; } } public int maxDivisor(int m,int n){ for(int x=n; x>=1;x--){ //通过观察得知最大公约数必须是小于或等于两个数的最小数n,而且必须大于等于1 if(n%x==0&&m%x==0){ //如果n、m能被同一个数整除,那么x就是n、m的公约数 divisor=x; break;//跳出循环获取最大的公约数 } } return divisor; } public int minMultiple(int m,int n){ for(int x=m; x>=1; x++)//通过观察发现最小公倍数大于或者等于最大数m { if(x%n==0&&x%m==0){ //如果x能被n、m同时整除,那么x就是n、m的公倍数 multiple=x; break;//跳出循环获取做小的公倍数 } } return multiple; } }
运行后得到的结果是: