C语言程序设计:求n个数的最小公倍数。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言程序设计:求n个数的最小公倍数。相关的知识,希望对你有一定的参考价值。
要求:必须使用数组做。
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。题目确保结果在32位整数范围内。
输入样例:2 4 6
输出样例: 12
要求:必须使用数组做。
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。题目确保结果在32位整数范围内。
输入样例:2 4 6
输出样例: 12
感恩节快乐哦!
*/
#include <stdio.h>
#include <stdlib.h>
/* 欧几里得算法求 数字 a b 的最大公约数 */
int gcd(int a,int b)
if(a<b)
return gcd(b,a);
else if(b==0)
return a;
else
return gcd(b,a%b);
/* 数字 a b 的最小公约数 */
int lcm(int a,int b)
return a*b/gcd(a,b);
int main(int argc, char *argv[])
int n,i,r;
int *data=NULL;
while(scanf("%d",&n)!=EOF)
// 动态申请数字空间
data = (int*)malloc(n*sizeof(n));
for(i=0;i<n;i++)
scanf("%d",&data[i]);
// 特殊处理只有一个数字的情况
if(n==1)
r = data[0];
else
// 先求前两个数字的最小公倍数
r = lcm(data[0],data[1]);
// 求第 i 个数字和前面所有数字的最小公倍数
for(i=2;i<n;i++)
r = lcm(r,data[i]);
printf("%d\n",r);
// 释放空间
free(data);
return 0;
参考技术A 原理:求最小公倍数,则先求最大公约数,最后所有数之积再除最大公约数即为最小公倍数
求两个数最大公约数原理:利用辗转相除法....自己百度一下,有详细
int
gcd(int
a,
int
b)
if
(a
==
0)
return
b;
if
(b
==
0)
return
a;
if
(a
<
b)
//交换两个数,使大数放在m上
int
tmp
=
a;
a
=
b;
b
=
tmp;
while
(b
!=
0)
int
tmp
=
a
%
b;
a
=
b;
b
=
tmp;
return
a;
利用函数gcd()返回数存在c,最后最小公倍数就为m
=
a
*
b
/
c
三个或者以上求最小公倍数时,先求前两个数最大公约数,然后用最大公约数跟下一个数求最大公约数,如此类推,最后把所有数相乘再除以最后得出的最大公约数,即为最小公倍数
我只给出思路而已,由于我没做过,如果你想要完成程序,就联系我吧
C语言试题七十八之请编写函实现求2个数的最大公约数和最小公倍数(辗转相除法)
1、 题目
求2个数的最大公约数和最小公倍数
2、思路:
(1)最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数;
(2)求最大公约数用辗转相除法(又名欧几里德算法)
3 、温馨提示
C语言试题汇总里可用于计算机二级C语言笔试、机试、研究生复试中C程序设计科目、帮助C语言学者打好程序基础、C语言基础,锻炼您的逻辑思维和解决问题的能力,帮助你成为C语言笔试、机试解题高手,帮助你拿到C语言工作的offer,每一个题目都附带源代码和运行结果,让你不再有任何困惑,妈妈再也不担心我的C语言了。如果程序有任何看不懂或者哪个步骤不理解的地方都可以加我微信(15874274916)私聊我,或者有更好的思路解决办法都可以加我微私聊,一起探讨、希望可以正真的帮助到你,同时也可以扫下面的二维码关注我微信公众号,比如你还对生活、美食或者其它方面都感兴趣,都可以加微信交流,博主擅长讲解计算机相关方面的知识、如果大家对计算机方向、前端、移动端、服务端、数据结构、算法、网络、高数等等一些列方向比较迷茫或者不知道要学哪些?或者具体怎么学?或者其它方向有任何困惑都可以找我交流,谢谢大家关注。
以上是关于C语言程序设计:求n个数的最小公倍数。的主要内容,如果未能解决你的问题,请参考以下文章