写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由

2024-11-29 02:48:47
推荐回答(2个)
回答(1):

算法思路:

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); }

运行结果:

回答(2):

#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)
;
}