C语言之函数调用07—求4个数的最大公约数和最小公倍数

来源:互联网 发布:淘宝商城魅族 编辑:程序博客网 时间:2024/05/17 18:47
//函数调用
/*
==========================================================
题目:求4个数的最大公约数和最小公倍数。
==========================================================
*/
#include<stdio.h>
long gys(long m,long n)
{
int t,r;
if(m<n)
{t=m;m=n;n=t;}
while((r=m%n)!=0)
{
m=n;n=r;
}
return (n);
}
long gys(long a,long b,long c)
{
long q;
q=gys(gys(a,b),c);
return(q);
}
long gys(long a,long b, long c,long d)
{
long q;
q=gys(gys(a,b,c),d);
return (q);
}
long gbs(long a,long b)
{
return a*b/gys(a,b);
}
long gbs(long a,long b,long c)
{
return gbs(a,b)*c/gys(gbs(a,b),c);
}
long gbs(long a,long b,long c,long d)
{
return gbs(a,b,c)*d/gys(gbs(a,b,c),d);
}
void main()
{
long a,b,c,d;
long gyshu,gbshu;
printf("输入四个数:");
scanf("%ld%ld%ld%ld",&a,&b,&c,&d);
gyshu=gys(a,b,c,d);
gbshu=gbs(a,b,c,d);
printf("%ld、%ld、%ld、%ld 的最大公约数是:%ld\n",a,b,c,d,gyshu);
printf("%ld、%ld、%ld、%ld 的最小公倍数是:%ld\n",a,b,c,d,gbshu);
}


/*
====================================================================
评:
要点在于重复调用!始终把计算结果作为一个数,就实现了先计算两个数a,b,
将gys(a,b)或gbs(a,b)作为一个数与c重新调用函数“gys”或“gbs”,同理,
将gys(a,b,c)或gbs(a,b,c)作为一个数与重新调用函数“gys”或“gbs”,
甚至可以实现更多数字的公约数和公倍数!如果数字比较多,而且大,就需要
改为double型!
缺点:显然这种方法写程序虽然直观但是很慢!读者可以试着用一个temp变量
保存最新的公约数,直到最后一个公约数求完为之。则问题转化为始终求两个
数的公约数。
=====================================================================
*/
0 0
原创粉丝点击