求最大公约数和最小公倍数的函数
本帖最后由 djdgf4 于 2022-5-20 14:03 编辑输出没有任何结果,请问是哪里错了?
我是参考了这个帖子,并不是单一想用辗转相除或更相减损,想问问在这个帖子的思路上,这串代码的错误?https://zhuanlan.zhihu.com/p/31824895
/*
* 该函数用来计算两个数的最大公约数
*/
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;
} https://www.runoob.com/python3/python3-hcf.html
https://www.runoob.com/python3/python3-lcm.html
可以参考上面链接 !优先级比&高,一些条件应该写作!(m&1)吧。
另外,gcd这个变量没用到,这应该是道题目吧,那尽量用gcd 递归的效率太低了。 return greatest_common_divisor( n, n-m);
应该是return greatest_common_divisor( m, n-m); 不懂就问,&是什么意思,两个小于号又是什么意思,求余不应该是%么? 列明 发表于 2022-5-20 13:42
不懂就问,&是什么意思,两个小于号又是什么意思,求余不应该是%么?
&是按位与运算,判断奇偶;<<是移位,相当于除以2 djdgf4 发表于 2022-5-20 13:55
&是按位与运算,判断奇偶;
原来这两个都是位运算啊,明白了,&位与,<<移位,我以前问过,别人也给我说过,我记住过,忘记了 #include <stdio.h>
int gcd(int a , int b)
{
if(b) return gcd(b , a % b) ;
else return a ;
}
int main(void)
{
int a , b ;
scanf("%d%d" , & a , & b) ;
printf("%d\n" , a * b / gcd(a , b)) ;
}
页:
[1]