输出没有结果,是错在哪里
/*
* 该函数用来计算两个数的最大公约数
*/
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;
}
看我的,改好了
#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行出疑似陷入无意义的循环。