设计最大公约数函数,利用该函数,设计求最大公倍数的函数
下面是我的一个实现,供你参考:
#include <stdio.h>
/** 求最大公约数
* 辗转相减法
* 算法参考:
* https://blog.csdn.net/yxdayd/article/details/44774015
*/
int gcd(int a,int b){
while(1){
if(a>b){
a-=b;
}else if(a<b){
b-=a;
}else{
return a;
}
}
}
/* 求最小公倍数
* 算法参考:
https://bbs.csdn.net/topics/90155042?list=1079159
作者:Norris_Zhang
* */
int lcm(int a,int b){
int gbs = a*b/gcd(a,b);
return gbs;
}
int main(void){
int a,b;
printf("请输入两个需要计算最大公约数的整数:");
scanf("%d %d",&a,&b);
printf("他们的最大公约数是%d.\n",gcd(a,b));
printf("请输入两个需要计算最小公倍数的整数:");
scanf("%d %d",&a,&b);
printf("他们的最小公倍数是:%d.\n",lcm(a,b));
return 0;
}
\\使用递归
#include <stdio.h>
int hcf(int n1, int n2);
int main()
{
int n1, n2;
printf("输入两个正整数,空格进行分割: ");
scanf("%d %d", &n1, &n2);
printf("%d 和 %d 的最大公约数为 %d", n1, n2, hcf(n1,n2));
return 0;
}
int hcf(int n1, int n2)
{
if (n2 != 0)
return hcf(n2, n1%n2);
else
return n1;
}
#include <stdio.h> \\使用循环
int main()
{
int n1, n2, i, gcd;
printf("输入两个正整数,空格分隔: ");
scanf("%d %d", &n1, &n2);
for(i=1; i <= n1 && i <= n2; ++i)
{
if(n1%i==0 && n2%i==0)
gcd = i;
}
printf("%d 和 %d 的最大公约数是 %d", n1, n2, gcd);
return 0;
}
int gcd(int a,int b){
if(b==0) return a;
return gcd(b%a,a);
}