Java基础算法题(06):输入两个正整数m和n,求其最大公约数和最小公倍数。

查看所有50道基础算法题请看:

Java的50道基础算法题

package Demo06GCD;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Greatest_Common_Divisor {
    /**
     * 输入两个正整数m和n,求其最大公约数和最小公倍数。
     */
    /*
    分析:最大公约数指两个或多个整数共有约数中最大的一个。
    常见的求最大公约数有多种方法有质因数分解法、短除法、辗转相除法、更相减损法。
    这几种方法都是数学方法,在了解了其原理之后,用计算机编程语言来完成,就简单了,
    我选一个咱国产的:更相减损法,该方法的操作是:
                                            可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。
     */
    public static void main(String[] args) {
        // 通过Scanner对象来获取用户输入
        while (true) {
            int num1 = 0;
            int num2 = 0;
            try {
                System.out.println("请输入第一个数:");
                Scanner sc = new Scanner(System.in);
                num1 = sc.nextInt();
                System.out.println("请输入第二个数;");
                num2 = sc.nextInt();
                // 判断两个数的大小,分别装到big和small变量里面
                int big = 0;
                int small = 0;
                if (num1 < num2) {
                    small = num1;
                    big = num2;
                } else if (num1 > num2) {
                    small = num2;
                    big = num1;
                } else {
                    System.out.println("输入有误,请重新输入……");
                }
                int halfs = 1;
                int flag = 0;
                // 如果两个数是偶数,则除以2,一直除到有一个不是偶数为止
                while (big % 2 == 0 && small % 2 == 0) {
                    big /= 2;
                    small /= 2;
                    halfs *= 2;
                }
                // 减损,拿大数减小数,一直减到减数等于差
                while (big - small > 0) {
                    flag = big - small;
                    big = flag > small ? flag : small;
                    small = flag < small ? flag : small;
                }
                // 返回最大公约数,即halfs*flag
                System.out.println("您输入的两个数的最大公约数为:" + (halfs * flag));
            } catch (InputMismatchException e) {
                System.out.println("您输入的数据有误,请输入输入数字:");
            }
        }
    }
}
发布了22 篇原创文章 · 获赞 1 · 访问量 1426

猜你喜欢

转载自blog.csdn.net/weixin_44803446/article/details/105354749