个人比较喜欢用辗转相除法求最大公约数
算法如下
if v>u
将变量u与v的值互换(使较大者u为被除数)
while(u/v的余数r≠0)
{u=v; (使除数v变为被除数u)
v=r; (使余数r变为除数v)
}
输出最大公约数r
最小公倍数l=u*v/最大公约数r
1 #include <stdio.h> 2 int Hcf,Lcd; //Hcf和Lcd是全局变量 3 4 int main() 5 { 6 void hcf(int,int); 7 void lcd(int,int); 8 int u,v; 9 scanf("%d,%d",&u,&v); 10 hcf(u,v); //调用hcf函数 11 lcd(u,v); //调用lcd函数 12 printf("H.C.F = %d\n",Hcf); 13 printf("L.C.D = %d\n",Lcd); 14 return 0; 15 } 16 17 void hcf(int u,int v) 18 { 19 int t,r; 20 if(v>u) {t=u;u=v;v=t;} 21 22 while((r=u%v)!=0) 23 { 24 u=v; 25 v=r; 26 } 27 Hcf=v; 28 } 29 30 void lcd(int u,int v) 31 { 32 Lcd=u*v/Hcf; 33 }