dabocaiqq
dabocaiqq
采纳率100%
2020-05-13 18:40

高分悬赏:Java语言计算三个数的最大公约数和最小公倍数怎么计算的呢

5
已采纳

高分悬赏:Java语言计算三个数的最大公约数和最小公倍数怎么计算的呢
高分悬赏:Java语言计算三个数的最大公约数和最小公倍数怎么计算的呢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • wojiushiwo945you 毕小宝 11月前

    这里有一篇可以参考哈:https://blog.csdn.net/gpdkq127/article/details/82527911
    这里贴代码不太好阅读,完整的博客看起来更清晰。

    点赞 1 评论 复制链接分享
  • weixin_43812485 林纳 1年前
    package yrq.play;
    import java.util.Scanner;
    public class Text{
    private static int x;
    private static int y;
    private static int z;
    public static void main(String [] arrgs){
    meun();
    }
    public  static void meun(){
        System.out.println("您要选择求最大公约数(输入0)还是最小公倍数(输入1)?");
        Scanner scanner = new Scanner(System.in);
        int or=scanner.nextInt();
        if (or==0){
            System.out.println("请选择序号:1.穷举法;2.欧几里得算法;3.辗转相减法");
            int or2=scanner.nextInt();
            if(or2==1){
                addNum();
                jisuan1();
                meun();
            }
            else if(or2==2){
                addNum();
                jisuan2();
                meun();
            }
            else if(or2==3){
                addNum();
                int bigDiv = getBigDiv(x, y);
                int bigDiv1 = getBigDiv(bigDiv, z);
                System.out.println("最大公约数为:"+bigDiv1);
                meun();
            }
            else {
                System.out.println("没有该选项");
                meun();
            }
    
        }
        else if(or==1){
            System.out.println("请选择序号:1.欧几里得算法;2.穷举法");
    
            int or3=scanner.nextInt();
            if(or3==1){
                addNum();
                int smallMul = getSmallMul(x, y);
                int smallMul1 = getSmallMul(smallMul, z);
                System.out.println("最小公倍数为"+smallMul1);
                meun();
    
            }
            else if(or3==2){
                addNum();
                int max=x>y?x:y;
                max=max>z?max:z;
                for (;;max++){
                    if(max%x==0&&max%y==0&&max%z==0){
                        System.out.println("最小公倍数为"+max);
                        meun();
                    }
                }
    
            }
            else {
                System.out.println("没有该选项");
                meun();
            }
        }
        else{
            System.out.println("没有此选择");
            meun();
        }
    }
    
    public static void addNum(){
        System.out.println("请输入要求的3个数");
        Scanner scanner=new Scanner(System.in);
        x=scanner.nextInt();
        y=scanner.nextInt();
        z=scanner.nextInt();
    
    }
    public static int getSmallMul(int a, int b) {// 求两个数的最小公倍数
    
        return (a * b) / getBigDiv(a, b);
    }
    
    public static int getBigDiv(int a, int b) {// 求两个数的最大公约数
        if (b == 0)
            return a;
        return getBigDiv(b, a % b);
    }
    public static void jisuan1(){
        int j=1;
        for(int i=1;i<=x&&i<=y&&i<=z;i++) {
    
            if (x % i == 0 && y % i == 0 && z % i == 0) {
                j = i;
            }
        }
    
        System.out.println("这三个数的最大公约数为:" +j);
    
    }
    public static void jisuan2(){
        int j=0;
        while (y != 0) {
            j=x%y;
            x=y;
            y=j;
        }
        j=0;
        while (z!=0){
            j=x%z;
            x=z;
            z=j;
        }
        System.out.println("这三个数的最大公约数为:" +x);
    
    }
    
    
    点赞 评论 复制链接分享
  • Amo_lt Amo_lt 1年前

    转载自:
    java语言求最小公倍数和最大公约数的三种算法

    import java.util.Scanner;
    
    
    public class Muitipie {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            System.out.print("input x :");
            int x = in.nextInt();
            System.out.print("input y :");
            int y = in.nextInt();
    
            int z = Method(x,y);
            System.out.println("辗转相除法:");
            System.out.println("divisor : "+z);
            System.out.println("multiple : "+(x*y/z));
    
            System.out.println("相减法:");
            z = Subtraction(x,y);
            System.out.println("divisor : "+z);
            System.out.println("multiple : "+(x*y/z));
    
            System.out.println("穷举法:");
            z = divisor(x,y);
            System.out.println("divisor : "+divisor(x,y));
            z=multiple(x,y);
            System.out.println("multiple : "+multiple(x,y));
        }
    
        //辗转相除法:返回公约数
        public static int Method(int x,int y){
            int a,b,c;
            a=x;
            b=y;
            while(b!=0){
                c=a%b;
                a=b;
                b=c;
            }
            return a;
        }
        //相减法
        public static int Subtraction(int x,int y){
            while(x!=y){
                if(x>y){
                    x=x-y;
                }
                else{
                    y=y-x;
                }
            }
            return x;
        }
        //穷举法  求公约数
        public static int divisor(int x,int y){
            int z;
            for(z=x;z>0;z--){
                if(x%z==0&&y%z==0){
                    break;
                }
            }
            return z;
        }
        //求公倍数
        public static int multiple(int x,int y){
            int z;
            for(z=x;;z++){
                if(z%x==0&&z%y==0){
                    break;
                }
            }
            return z;
        }
    
    }
    
    点赞 评论 复制链接分享