m0_66176795 2022-05-20 11:32 采纳率: 70.6%
浏览 322

编写函数求最大公约数和最小公倍数

 输出没有结果,是错在哪里

/*
* 该函数用来计算两个数的最大公约数
*/
int greatest_common_divisor(int n,int m)
{
    int gcd=-1;
    // 请在下面添加代码
    // ********** Begin ********** 
    if( n == m)
        return n;
    if( n < m)
        return greatest_common_divisor( m, n);
    else {
        if( !n&1 && !m&1 )
            return greatest_common_divisor( n>>1, m>>1)*2;
        else if( !n&1 && m&1 )
            return greatest_common_divisor( n>>1, m);
        else if( n&1 && !m&1 )
            return greatest_common_divisor( n, m>>1);
        else
            return greatest_common_divisor( n, n-m);
    }
    // **********  End  **********
    return gcd;
}

/*
* 该函数用来计算两个数的最小公倍数
*/
int least_common_multiple(int n,int m)
{
    int lcm=0;
    // 请在下面添加代码
    // ********** Begin ********** 
    int greatest_common_divisor(int n,int m);
    lcm = ( n * m )/(greatest_common_divisor( n, m));
    // **********  End  **********
    return lcm;
}

  • 写回答

2条回答 默认 最新

  • 吕布辕门 新星创作者: 后端开发技术领域 2022-05-20 12:16
    关注

    看我的,改好了

    img

    
    #include<stdio.h>
    int yue(int m,int n)
    {
     int r;
     if(m<n)
     {
      int t=n;
      n=m;
      m=t;
     }
     while(n)
     {
        r=m%n;
        m=n;
        n=r;
     }
     return m;
    }
    
    
    int bie(int m,int n)
    {
     int p=m*n;
     return (p/yue(m,n));
    }
    
    
    int main()
    {
     int m,n;
     int gy,gb;
     scanf("%d%d",&m,&n);
     gy=yue(m,n);
     gb=bie(m,n);
     printf("%d\n%d\n",gy,gb);
     return 0;
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 5月20日