程序设计第二次作业-Java“求两个正整数的最大公约数和最小公倍数”流程图+调试+程序

题目:求两个正整数的最大公约数和最小公倍数。
基本要求:程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。
提高要求:1.三种以上算法解决两个正整数最大公约数问题。
2.求3个正整数的最大公约数和最小公倍数。
这里写图片描述

程序:

import java.util.Scanner;

//计算两个整数的最大公约数、最小公倍数的方法一
public class Way1 {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.print("请输入两个整数:");
        int m=in.nextInt();
        int n=in.nextInt();
        int max=0,min= 0;//定义最大公约数、最小公倍数
        if(m>n)//将m记为两数间的较小值
        {
        int t=m;
        m=n;
        n=t;
        }
        for(int i=1;i<=m;i++)
        {
        if(m%i==0&n%i==0)
        max=i;
        }
        min=m*n/max;
        System.out.println("最大公约数为:"+max+",最小公倍数为:"+min);
        }
}

这里写图片描述

程序:

import java.util.Scanner;

//辗转相除法
//计算两个整数的最大公约数、最小公倍数的方法二
public class Way2{
    public static void main(String[] args) {
       Scanner in=new Scanner(System.in);
       System.out.print("请输入两个整数:");
       int m=in.nextInt();
       int n=in.nextInt();
       int z=m*n;//计算此时的m*n
       int max=0,min= 0;//定义最大公约数、最小公倍数
       if(m>n)//将m记为两数间的较小值
           {
           int t=m;
           m=n;
           n=t;
           }
       int r=n%m;
       while(m!=0)
       {   r=n%m;
           n=m;
           m=r;
       }
       max=n;
       min=z/n;
       System.out.println("最大公约数为:"+max+",最小公倍数为:"+min);
       }
}

这里写图片描述

程序:

import java.util.Scanner;

//大数翻倍法
//计算两个整数的最大公约数、最小公倍数的方法三
public class Way3 {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.print("请输入两个整数:");
        int m=in.nextInt();
        int n=in.nextInt();
        int max=0,min= 0;//定义最大公约数、最小公倍数
        if(m>n)//将m记为两数间的较小值
        {
        int t=m;
        m=n;
        n=t;
        }   
        int a=m;int b=n;
        if(n%m==0){
            max=m;
            min=n;
        }
        int c;
        while((c=n%m)!=0){
            n=m;
            m=c;
        }
        //两数互质
        if(m==1){
            max=m;
            min=a*b;
        }
        if(b%a!=0&&m!=1){
            int i=2;
            while(b*i%a!=0){
                i=i+1;
            }
            min=b*i;
            max=b*a/min;

        }
        System.out.println("最大公约数为:"+max+",最小公倍数为:"+min);
        }
}

这里写图片描述

程序:

import java.util.Scanner;

//计算三个整数的最大公约数、最小公倍数
public class Way4 {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.print("请输入三个整数:");
        int m=in.nextInt();
        int n=in.nextInt();
        int q=in.nextInt();
        int max=0,min= 0;
        int Max=0,Max2=0,Min= 0;//定义最大公约数、最小公倍数
        //求m,n 的最大公约数、最小公倍数
        if(m>n)//将m记为两数间的较小值
        {
        int t=m;
        m=n;
        n=t;
        }
        for(int i=1;i<=m;i++)
        {
        if(m%i==0&n%i==0)
        max=i;
        }
        min=m*n/max;
        //求max和q的最大公约数
        int l=q;
        if(q>max)//将q记为两数间的较小值
        {
        int t=max;
        max=q;
        q=t;
        }
        for(int i=1;i<=q;i++)
        {
        if(q%i==0&max%i==0)
        Max=i;
        }
        //求min和q的最小公倍数
        if(l>min)//将l记为两数间的较小值
        {
        int t=l;
        l=min;
        min=t;
        }
        for(int i=1;i<=l;i++)
        {
        if(l%i==0&min%i==0)
        Max2=i;
        }
        Min=l*min/Max2;
        System.out.println("最大公约数为:"+Max+",最小公倍数为:"+Min);
        }
}

调试及测试截屏:

输入两数为互质数:
这里写图片描述

输入两数为倍数关系:
这里写图片描述

输入两数非倍数关系且非互质数:
这里写图片描述

输入三个数:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_43109561/article/details/82469343
今日推荐