各位大哥大姐大叔大嫂教教我呀:如何用JAVA语言实现求三个正整数的最小公倍数。请写完整代码,并有便于菜鸟理解的注释。(因为本人比教菜,看不出一些基本的书写错误,所以代码务必要通过编译能够运行),万分感谢!!!!!!!!!!!!!!!

解决方案 »

  1.   

    先得到三个中最大的数,然后一倍一倍增加,分别判断是否能被这三个数整除就ok了
    -----------------------------------
    public class MiniMultip {
    private int i,j,k;
    private int miniMultip;
    public MiniMultip(int i,int j, int k){
    this.i = i;
    this.j = j;
    this.k = k;
    }

    public void cal(){
    int max = max();
    for(int mult=1; ; mult++){
    int tmp = max*i;
    if(tmp%i==0 && tmp%j==0 && tmp%k==0){
    miniMultip = tmp;
    return;
    }
    }
    }
    public int getMin(){
    return miniMultip;
    }

    private int max(){
    int tmp = i;
    if(tmp < j)
    tmp = j;
    if(tmp < k)
    tmp = k;

    return tmp;
    }

    public static void main(String args[]){
    MiniMultip mm = new MiniMultip(10,34,17);
    mm.cal();
    System.out.println(mm.getMin());
    }
    }
      

  2.   

    两个两个的来和三个的没什么区别,if里面少一个判断,函数多调用一次就ok了
      

  3.   

    believe大哥你有QQ吗,想加你,有些细节我不太明白!
    那你给出的代码怎么修改一下让它实现求解“任意”的三个正整数的最小公倍数呢?
                                    麻烦你告诉我,感谢了!!!!
      

  4.   

    刚刚写的,调用getCommon形参是一个数组,这样不但可以算3个数几十几百个都可以//最大公倍数
    private static int getMaxCommonDivisor(int nNum1, int nNum2)
    {
    int a = Math.min(nNum1,nNum2);
    int b = Math.max(nNum1,nNum2);
    int c = a;

    while (c!=0)
    {
    a = c;
    c = b%a;
    b = a;
    }

    return a;

    }

    //最小公约数
    private static int getMinCommonMultiple(int nNum1, int nNum2)
    {
    return (nNum1*nNum2/getMaxCommonDivisor(nNum1, nNum2)); 
    }

    //求多个数的最大公约数与最小公倍数
    private static int[] getCommon(int[] nArr)
    {
    int nMaxCommonDivisor = 0;
    int nMinCommonMultiple = 0;
    if (nArr != null && nArr.length>1)
    {
    nMaxCommonDivisor = getMaxCommonDivisor(nArr[0],nArr[1]);
    nMinCommonMultiple = getMinCommonMultiple(nArr[0],nArr[1]);
    for(int n=2; n<nArr.length; n++)
    {
    nMaxCommonDivisor = getMaxCommonDivisor(nMaxCommonDivisor,nArr[n]);
    nMinCommonMultiple = getMinCommonMultiple(nMinCommonMultiple,nArr[n]);
    }
    }

    return new int[]{nMaxCommonDivisor,nMinCommonMultiple};
    }
      

  5.   


    public class TestNumber {
    private int i,j,k,tmp1,tmp2; /**
     * @param args
     */
    public TestNumber(int i,int j,int k){
    this.i=i;
    this.j=j;
    this.k=k;

    }
    public void max(int i,int j){
    if(i>j){
    tmp1 =i;
    tmp2 =j;
    }
    else{
    tmp1 =j;
    tmp2 =i;
    }
    }
    public int fun(int a,int b){
    if(b==0)
              return a;
         else
              return fun(b,a%b);
    }
    public static void main(String[] args) throws Exception{
    // TODO Auto-generated method stub
        TestNumber tn = new TestNumber(18,6,8);
        tn.max(4,6);
        int p =tn.fun(tn.tmp1,tn.tmp2);
        tn.max(6,8);
        int q =tn.fun(tn.tmp1,tn.tmp2);
        tn.max(p,q);
        int s =tn.fun(tn.tmp1,tn.tmp2);
        System.out.println("最大公约数为 : "+s);
        int g =tn.i*tn.j*tn.k/(s*s);
        System.out.println("最小公倍数为 : "+g);
    }}
      

  6.   

    我刚才的代码,结合
    public static void main(String[] args) throws Exception
    {
             //要处理的数组
    int[] nArr = new int[]{12,5,30};
             //narr[0]是最大公约数,narr[1]最小公倍数
    int[] narr = getCommon(nArr);
    System.out.println(narr[0]+","+narr[1]);
    }
      

  7.   

    补了一点注释
    //最大公倍数
    private static int getMaxCommonDivisor(int nNum1, int nNum2)
    {
    int a = Math.min(nNum1,nNum2);
    int b = Math.max(nNum1,nNum2);
    int c = a;
    //欧几里德算法
    while (c!=0)
    {
    a = c;
    c = b%a;
    b = a;
    }

    return a;

    }

    //最小公约数
    private static int getMinCommonMultiple(int nNum1, int nNum2)
    {
    //两数相乘除以最大公约数
    return (nNum1*nNum2/getMaxCommonDivisor(nNum1, nNum2)); 
    }

    //求多个数的最大公约数与最小公倍数
    private static int[] getCommon(int[] nArr)
    {
    int nMaxCommonDivisor = 0;
    int nMinCommonMultiple = 0;
    if (nArr != null && nArr.length>1)
    {
    //算出前两个数的最大公约数与最小公倍数
    nMaxCommonDivisor = getMaxCommonDivisor(nArr[0],nArr[1]);
    nMinCommonMultiple = getMinCommonMultiple(nArr[0],nArr[1]);

    //对数组循环从下标2开始
    for(int n=2; n<nArr.length; n++)
    {
    //利用已算出的最大公约数与最小公倍数再计算
    nMaxCommonDivisor = getMaxCommonDivisor(nMaxCommonDivisor,nArr[n]);
    nMinCommonMultiple = getMinCommonMultiple(nMinCommonMultiple,nArr[n]);
    }
    }

    //返回最终结果
    return new int[]{nMaxCommonDivisor,nMinCommonMultiple};
    }