1、定义一个类,有方法实现求最大公约数
2、定义上述类的子类,有方法实现求最小公倍数
3、在public class 中,通过键盘输入,计算和输出结果
4、要求类中的方法的传值,采用带参数和不带参数的两种方式,分别实现
import java.util.Scanner;
/**
*
* https://zhidao.baidu.com/question/464132909.html
*/
public class GCD_LCM {
/**
* https://ask.csdn.net/questions/7530425?spm=1005.2025.3001.5141
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* 百度关键词:java 获取键盘输入 两个整数
* 参考链接:
* ————————————————
https://www.cnblogs.com/Celiachen/p/13846842.html
*
* */
Scanner sc=new Scanner(System.in);
System.out.println("请输入两个需要计算最大公约数的整数:");
int a=sc.nextInt();
int b=sc.nextInt();
System.out.println(a+"和"+b+"的最大公约数是:"+new GCD().FindResult(a, b));
System.out.println("请输入两个需要计算最小公倍数的整数:");
a=sc.nextInt();
b=sc.nextInt();
System.out.println(a+"和"+b+"的最小公倍数是:"+new LCM().FindResult(a, b));
new GCD().FindResultNoArgs();
new LCM().FindResultNoArgs();
}
}
/**
*
* 百度关键词:最大公约数 算法
*https://www.imooc.com/article/23830
*/
class GCD{
/**
* 辗转相减法
* 算法参考:
* https://blog.csdn.net/yxdayd/article/details/44774015
*/
public int FindResult(int a ,int b) {
while(true) {
//如果a大于b,则将a的值设为a原本的值减去b的值
if (a > b)
a -= b;
else if (a < b) //如果a小于b,则将b的值设为b原本的值减去a的值
b -= a;
else //如果经过运算,最后a和b的相等,则返回a的值,即为原本a和b的最大公约数
return a;
}
}
/*不带参数版本
* 不知道这个我理解对意思没?
*
* */
public void FindResultNoArgs() {
Scanner sc=new Scanner(System.in);
System.out.println("请输入两个需要计算最大公约数的整数:");
int a=sc.nextInt();
int b=sc.nextInt();
System.out.println(a+"和"+b+"的最大公约数是:"+ FindResult(a,b));
}
}
//求最小公倍数 百度关键词:最小公倍数 算法
class LCM extends GCD{
/*
* 算法参考:
https://bbs.csdn.net/topics/90155042?list=1079159
作者:Norris_Zhang
* */
public int FindResult(int a ,int b) {
//最小公倍数是两数乘积除以最大公约数。
//百度关键词 :子类继承父类 重写
//参考链接:https://blog.csdn.net/qq_43527632/article/details/83475439
int gbs = a * b / super.FindResult(a,b);
return gbs;
}
/* 无参数版,不知道我理解对意思么?*/
public void FindResultNoArgs() {
Scanner sc=new Scanner(System.in);
System.out.println("请输入两个需要计算最大公约数的整数:");
int a=sc.nextInt();
int b=sc.nextInt();
System.out.println(a+"和"+b+"的最小公倍数是:"+FindResult(a, b));
}
}