求最小公倍数,这样考虑周全吗
#include<stdio.h>int Gcd(int x,int y)
{
int s=x%y;
while(s)
{
x=y;
y=s;
s=x%y;
}
return y;
}
int main()
{
int Gcd(int x,int y);
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
int min;
min=Gcd(Gcd(a,b),c);
int max;
max=(a*b/Gcd(a,b))*(c)/Gcd(a*b/Gcd(a,b),c);
printf("%d %d",min,max);
} 本帖最后由 fc1735 于 2016-11-13 04:29 编辑
代码没有问题喔,不过我有一些建议
#include<stdio.h>
int Gcd(int x,int y) //最大公因数
{
int s=x%y;
while(s)
{
x=y;
y=s;
s=x%y;
}
return y;
}
int main()
{
int Gcd(int x,int y);
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
int min;
min=Gcd(Gcd(a,b),c); //不懂为何命名为min,用来代表最大公因数不是?
int max;//同上,用来代表最小公倍数,容易误导人
max=(a*b/Gcd(a,b))*(c)/Gcd(a*b/Gcd(a,b),c);
//a*b/Gcd(a,b)为a,b之最小公倍数,先用符号m表示
//剩下的 c/Gcd(a*b/Gcd(a,b),c) ,即m和c之最小公倍数再除掉m的结果
//如果另外写个函数是不是比较方便也比较容易阅读和维护呢
//即改写成Lcm( Lcm(a,b),c )
printf("%d %d",min,max);
}
int Lcm(int x,int y)
{
return x*y/Gcd(x,y);
} 好的,谢谢,细节很重要的
页:
[1]