题解 | #c语言递归求解最大公约数最小公倍数#

小乐乐与欧几里得

http://www.nowcoder.com/practice/da13e0cf321e4df9acd0fdf0a433cbb0

#include<stdio.h>
typedef long long ll;
int main(void) {
	ll a = 0, b = 0;
	scanf("%ld %ld", &a, &b);
    ll gcd(ll a,ll b);
// 	//辗转相除法:   当得到余数为0时,被除数即为最大公约数
	//最小公倍数*最大公约数=a*b
    printf("%ld",gcd(a,b)+(a*b)/gcd(a,b));
	return 0;
}
ll gcd(ll a,ll b){//b不为0一直做取余运算,递推到传入的b为0时,返回的是a的值即为当前余数
     //	严格来说小的数应该放在第二位,但使用递归时,第一次运算就会把大小数交换,不用人为交换
    //  eg:a=15,b=20; gcd(a,b) 按递推式有:a=20,b=a%b=15;
    return b?gcd(b,a%b):a;//b不为0为真时执行1 为0时执行2
};


全部评论

相关推荐

炫哥_:哥们项目描述里面vector和mysql之类的都要写吗,直接开头技术栈巴拉巴拉就行了,完全不是技术点啊
点赞 评论 收藏
分享
04-28 22:33
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务