JAVA面试算法题4

题目:

输入两个正整数m和n (m>n),求其最大公约数和最小公倍数


代码:

这题目用小学里面学过的”辗转相除法“就可以求最大公约数了,而最小公倍数则是2个数乘积除以最大公约数。适当考虑下2个数大小就可以了。

package com.charles.algo;
/**
 * @author charles.wang
 * 题目:输入两个正整数m和n (m>n),求其最大公约数和最小公倍数
 */
public class GongYueShuGongBeiShu {
      
    private GongYueShuGongBeiShu(){}
      
      
    /**
     * 用辗转相除法来计算最大公约数
     */
    public static int maxGongYue(int m, int n){
          
        //确保m>=n 才可以做除法运算,否则交换2个数
        int temp;
        if(m<n){
            temp= n;
            n=m;
            m=temp;
        }
          
          
        //计算余数,它会小于n
        int remain = m % n;
          
        //如果整除了,那么除数就是最大公约数
        if(remain==0)
            return n;
          
        //否则,递归调用
        return maxGongYue( n,remain);
          
    }
      
    /**
     * 最小公倍数的值为二个数的乘积除以最大公约数
     */
    public static int minGongBei(int m,int n){
        return m*n/maxGongYue(m,n);
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
          
          
        int m = 12;
        int n = 18;
          
        System.out.println("输入数为:"+m+ " ,"+n);
        System.out.println("最大公约数为:"+maxGongYue(m,n));
        System.out.println("最小公倍数为:"+minGongBei(m,n));
    }
}


你可能感兴趣的:(java,算法)