想在C语言里求两个数的最大公约数,最经典的方法就是辗转相除法啦,也叫欧几里得算法,简单到爆炸!大致思路是这样的:
举个例子,输入12和18,辗转相除过程就是18%12=6,接着12%6=0,所以最大公约数是6。利用最大公约数,我们还能轻松算出最小公倍数,公式超简单:最小公倍数 = (a × b) / 最大公约数。是不是很神奇~
再来说说相减损法,其实它和辗转相除法有点类似,只不过是用减法来操作。步骤就是:
比如求18和12的最大公约数,18-12=6,然后12-6=6,再接着6-6=0,就停啦,最大公约数是6。这个方法更直观,也很适合刚接触编程的朋友们去理解。

如果要求三个数的最大公约数和最小公倍数,其实思路跟两个数的很像,只是要稍微“玩转”一下函数调用。你可以这样干:
简单的代码示意就是:
int gcd(int a, int b) {
while (b != 0) {
int temp = a % b;
a = b;
b = temp;
}
return a;
}
int lcm(int a, int b) {
return a / gcd(a, b) * b;
}
int gcd_three(int a, int b, int c) {
return gcd(gcd(a, b), c);
}
int lcm_three(int a, int b, int c) {
return lcm(lcm(a, b), c);
}
输入三个正整数,然后调用这些函数,就能轻轻松松算出来。要注意的是,最小公倍数可能不存在某些情况下(比如参数非法时),但通常正整数环境下是没问题的哦。
另外,程序里也可以设置输入提示和输出语句,让用户体验更友好,比如:
请输入三个正整数:3 6 9
最大公约数是:3
最小公倍数是:18
这对学习C语言基础、理解算法也非常有帮助呢!

C语言用辗转相除法和相减损法有什么区别吗?
哎哟,这俩方法其实都能帮你算最大公约数,但辗转相除法更高效,计算快到飞起,适合大数;而相减损法更直观,比较适合入门理解,不过对大数来说就不太省劲啦!所以平时写程序推荐用辗转相除,码代码超顺!
最小公倍数为什么要用最大公约数来计算呢?
这玩意儿其实是数学里一个超级棒的“绝妙搭档”,有了最大公约数,计算最小公倍数就轻松到爆啦!用公式:最小公倍数 = (两个数乘积) / 最大公约数,让计算稳稳的,不容易出错,棒棒哒~
输入三个数时,如果最小公倍数不存在怎么办?
哎呀,正常说输入正整数,最小公倍数肯定存在!不过如果输入了什么奇怪的值,比如0或者负数,程序就要做判断啦,可以输出“not exist min_common_multiple!”提醒你输入有误,避免程序崩溃,写代码就是要这么贴心。
新手写C语言求最大公约数,常见坑有哪些呢?
哎,别说,常见的坑真的不少!比如忘了判断输入是否为正整数嘞,或者循环条件写错导致死循环,或者除数为0没处理导致程序崩溃,还有就是函数调用顺序弄错啦,哈哈!所以写代码一定得小心翼翼,多调试几遍,才能安心放心地放飞自我~
添加评论