小白C语言编程实战(17):求最大公约数(gcd)和最小公倍数(lcm)

这是《小白C语言编程实战》系列的第17篇。
上一篇:小白C语言编程实战(16):统计4门课的优秀率和不及格率


题目

求任意两个正整数的最大公约数(Least Common Multiple)和最小公倍数(Greatest Common Divisor),要求定义两个函数:

(1)函数int gcd(int x, int y)求两个正整数的最大公约数,函数返回最大公约数;

(2)函数int lcm(int x, int y)求两个正整数的最小公倍数(要求自己设计算法,不能利用下面关系计算最小公倍数:最大公约数x最小公倍数=两个数乘积 ),函数返回最小公倍数。

在主函数中输入任意两个正整数,调用上述函数求解,然后输出结果。

要求

输入输出格式示例:

输入

18 32

输出

6,90

提示

  1. 求最大公约数可以通过一条性质递归求解

gcd(x,y) = gcd(x%y,y)(这里假设设x>y)

若果x=y,此时x%y=0,最大公约数就是x或者y本身。

  1. 最小公倍数因为不能用lcm(x,y)*gcd(x,y) = x*y公式来求解,因此考虑逐其他办法。

参考代码

#include <stdio.h>
#include <stdlib.h>

/**
求任意两个正整数的最大公约数
*/
int gcd(int x, int y) {
	if(y == 0) {
		return x;
	} else if(x>=y) {
		return gcd(y, x%y);
	} else {//x<y
		return gcd(x, y%x);
	}
}
/**
求任意两个正整数的最小公倍数 
*/
int lcm(int x, int y) {
	if(x==y) {
		return x;
	} else if(x<y) {
		int t = x;
		x = y;
		y = t;
	}
	// 上面保证了x>y
	int i, sum = 0;
	for(i=1;i<=y;i++) {
		sum += x;
		if(sum%y == 0) {
			return sum;
		}
	} 
	return 0;
} 
/**
主函数
*/ 
int main(int argc, char *argv[]) {
	int x, y;
	scanf("%d%d", &x, &y);
	printf("%d,%d", gcd(x,y), lcm(x,y));
	return 0;
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值