题目:求两个正整数的最大公约数和最小公倍数。

题目:求两个正整数的最大公约数和最小公倍数。

基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。

提高要求:1.三种以上算法解决两个正整数最大公约数问题。

          2.求3个正整数的最大公约数和最小公倍数。

解题思路:

a.求最大公约数  

辗转相减法:取两个数中的最大的数做减数,较小的数做被减数,用最大的数减去小数,如果结果为0,则被减数就是这两个数的最大公约数,如果结果不为0,则继续用这两个数中最大的数减较小的数,直到结果为0,则最大公约数为被减数。程序流程图如下:

题目:求两个正整数的最大公约数和最小公倍数。_第1张图片

程序代码:

/**

        * 辗转相除法计算两个数的最大公约数

        * @param a:参数一

        * @param b:参数二

        * @return ab的最大公约数

        * */

       public static int greatest1(int a,int b) {

              while(a!=b) {

                     if(a>=b)

                            a=a-b;

                     else

                            b=b-a;

                     }

              return b;

              }

辗转相除法:取两个数中最大的数做除数,较小的数做被除数,用最大的数除较小数,如果余数为0,则较小数为这两个数的最大公约数,如果余数不为0,用较小数除上一步计算出的余数,直到余数为0,则这两个数的最大公约数为上一步的余数。程序流程图:

题目:求两个正整数的最大公约数和最小公倍数。_第2张图片

程序代码:

/**

 * 辗转相除法计算两个数的最大公约数

 * @param r:除以b的余数

 * @param a:参数一

 * @param b:参数二

 * @return ab的最大公约数

 * */

       public static int greatest2(int a,int b) {

              int r;

              while((r=a%b)!=0) {

                     a=b;

                     b=r;

              }

              return b;

       }

穷举法:将两个数作比较,取较小的数,以这个数为被除数分别和输入的两个数做除法运算,被除数每做一次除法运算,值减少1,直到两个运算的余数都为0,则该被除数为这两个数的最大公约数。算法流程图:

题目:求两个正整数的最大公约数和最小公倍数。_第3张图片

程序代码:

/**

        * 穷举法计算两个数的最大公约数

        * @param temp:交换变量

        * @param a:参数一

        * @param b:参数二

        * @return temp:ab的最大公约数

        * */

       public static int greatest3(int a,int b) {

              int temp=b;

              while((a%temp)!=0||(b%temp)!=0) {

                     temp=a;

                     a=b;

                     b=temp;

              }

              return temp;      

       }

b.求最小公倍数

算法代码:

/**

 * 求最大公倍数的方法

 * */

public class Multiple {

       public static int multiple(int a,int b) {

              return a*b/Greatest.greatest1(a, b);

       }

}

 

测试类:

package www.chenxi.test;

import java.io.IOException;

import java.util.Scanner;

 

 

import www.chenxi.domain.Greatest;

import www.chenxi.domain.Multiple;

 

 

public class Test {

 

 

       public static void main(String[] args) throws IOException {

 

 

              Scanner in = new Scanner(System.in);

              System.out.println("请输入第一个数:");

              int a = in.nextInt();

              System.out.println("请输入第二个数:");

              int b = in.nextInt();

              System.out.println("辗转相减法所得"+a+""+"b"+"的最大公约数为:"+Greatest.greatest1(a, b));

              System.out.println("辗转相除法所得"+a+""+"b"+"的最大公约数为:"+Greatest.greatest2(a, b));

              System.out.println("穷举法法所得"+a+""+"b"+"的最大公约数为:"+Greatest.greatest3(a, b));

              System.out.println(a+""+"b"+"的最小公倍数为:"+Multiple.multiple(a, b));

              in.close();

       }

}

程序运行截图:

题目:求两个正整数的最大公约数和最小公倍数。_第4张图片

求三个数的最大公约数和最小公倍数:

package www.chenxi.domain;

/**

 * 多个数求最小公倍数和最大公约数的方法

 * */

public class ManyNum {

       public static int greatestMauny(int a,int b,int c) {

    int i;

              for (i= a; i>0; i-- )

                     if (a%i==0&&b%i==0&&c%i==0)

                            break;

              return i;

       }

       public static int multipleMany(int a,int b,int c) {

              int i;

              for (i= a; ; i++ )

                     if (i%a==0&&i%b==0&&i% c==0)

                            break;

              return i;

       }

}

 

package www.chenxi.test;

import java.io.IOException;

import java.util.Scanner;

import www.chenxi.domain.ManyNum;

public class Test1 {

       public static void main(String[] args) throws IOException {

              Scanner in = new Scanner(System.in);

              System.out.println("请输入第一个数:");

              int a = in.nextInt();

              System.out.println("请输入第二个数:");

              int b = in.nextInt();

              System.out.println("请输入第三个数:");

              int c = in.nextInt();

              System.out.println(a+","+b+","+c+"的最小公倍数为:"+ManyNum.multipleMany(a, b, c));

              System.out.println(a+","+b+","+c+"的最大公约数为:"+ManyNum.greatestMauny(a, b, c));

              in.close();

              }

}

 

运行结果:

题目:求两个正整数的最大公约数和最小公倍数。_第5张图片

 

你可能感兴趣的:(程序设计方法学作业)