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

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

/*
* 该函数用来计算两个数的最大公约数
*/
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;
}

看我的,改好了

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;
}

你好,
在你gcd函数里,我没有看到辗转相除法的核心计算语句(你可以参考论坛里其他人的算法)。另外,在12行出疑似陷入无意义的循环。