算法思路:
if v>u , u、v互换u为被除数
u%v求余,余数r不等于0
v→u r→v 求出最大公约数r
最小公倍数l=u*v/r
程序:
#include
void main ( )
{ int hcf(int,int); /*函数声明*/
int lcd(int,int,int); /*函数声明*/
int u,v,h,l;
scanf ("%d,%d",&u,&v);
h=hcf(u,v); /*函数调用*/
printf ("H.C.F=%d\n",h);
l=lcd(u,v,h); /*函数调用*/
printf("L.C.D=%d\n",l);
}
int hcf(int u,int v) /*定义调用函数,求最大公约数*/
{ int t,r;
if (v>u)
{ t=u;u=v;v=t; }
while ((r=u%v)!=0)
{ u=v; v=r; }
return(v);
}
int lcd(int u,int v,int h) /*定义调用函数,求最小公倍数*/
{ return(u*v/h); }
运行结果:
#include
void
main()
{
int
m(int
x,int
y);
int
a,b,t,p,q;
printf("请输入两个正整数:\n");
scanf("%d,%d",&p,&q);
if
(p==q)
{
printf("最大公约数和最小公倍数均为:%d\n",p);
}
else
if(p{
t=p;
p=q;
q=t;
a=m(p,q);
//调用一个函数
b=p*q/a
;
//两个数的乘积等于它们最大公约数和最小公倍数的乘积
printf("最大公约数为:%d\n",a);
printf("最小公倍数为:%d\n",b);
}
else
{
a=m(p,q);
//同上
b=p*q/a;
printf("最大公约数为:%d\n",a);
printf("最小公倍数为:%d\n",b);
}
}
//用辗转相除法求最大公约数
#
include
int
m(int
x,int
y)
{
int
z;
while(y!=0)
{
z=x%y;
x=y;
y=z;
}
return(x)
;
}