3.C_Demo_最大公约数、最小公倍数

辗转相除法求出最大公约数思路:

假设两个数字a和b,求两个数字相除的余数c=a%b,如果余数为0,则b为最大公约数。如果b不为零,a=b,b=c,继续循环计算

最小公倍数思路:

两个数的最小公倍数数等于两个数的乘积除以两个数的最大公约数。即:x,y的最小公倍数 min(公倍数)=x*y÷max(公约数)

代码接口说明如下:

1、unsigned int GreatestCommonDivisor(unsigned int a,unsigned int b);

功能:求a,b最大公约数

参数a,b:传入的两个数值,不能全为0

返回值:0代表错误,正常返回最大公约数

2、unsigned int LeastCommonMultiple(unsigned int a,unsigned int b);

功能:求a,b最小公倍数

参数a,b:传入的两个数值,两个数都不能为0

返回值:0代表错误,正常返回最小公倍数

具体代码实现如下:

#include <stdio.h>

/* 最大公约数 */
/* 返回最大公约数,返回0代表错误 */
unsigned int GreatestCommonDivisor(unsigned int a,unsigned int b){
	
	unsigned int c;
	
	if( a == 0 && b != 0 ){
		return b; 
	}else if( a != 0 && b == 0 ){
		return a;
	}else if( a == 0 && b == 0 ){
		printf("err:both input data are '0'\n");
		return 0;
	}else{
		while(1){
			c = a % b;
			if(c == 0){
				return b;
			}else{
				a=b;
				b=c;
			}	
		}		
	} 	
}

/* 最小公倍数 */
/* 返回最小公倍数,返回0代表错误 */
unsigned int LeastCommonMultiple(unsigned int a,unsigned int b){

	if( a == 0 || b == 0){
		printf("err:input data have '0'\n");
		return 0;
	}else{
		return (a * b / GreatestCommonDivisor(a,b));
	} 
}
int main(){
	
	
	printf("GCD:%d\n",GreatestCommonDivisor(20,30));
	printf("LCM:%d\n",LeastCommonMultiple(30,20)); 
	return 0;
} 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值