大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
/*
创新互联专业为企业提供叙州网站建设、叙州做网站、叙州网站设计、叙州网站制作等企业网站建设、网页设计与制作、叙州企业网站模板建站服务,10多年叙州做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
要求:必须使用数组做。
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。题目确保结果在32位整数范围内。
输入样例:2 4 6
输出样例: 12
感恩节快乐哦!
*/
#include stdio.h
#include stdlib.h
/* 欧几里得算法求 数字 a b 的最大公约数 */
int gcd(int a,int b)
{
if(ab)
{
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;in;i++)
{
scanf("%d",data[i]);
}
// 特殊处理只有一个数字的情况
if(n==1)
{
r = data[0];
}
else
{
// 先求前两个数字的最小公倍数
r = lcm(data[0],data[1]);
// 求第 i 个数字和前面所有数字的最小公倍数
for(i=2;in;i++)
{
r = lcm(r,data[i]);
}
}
printf("%d\n",r);
// 释放空间
free(data);
}
return 0;
}
编写该程序的整体思路:分别定义最大公约数函数和最小公倍数函数,然后再main函数里面调用它。C语言实现代码如下:
#includestdio.h
#includemath.h
int fun_gy(int,int); //声明最大公约数函数
int fun_gb(int,int); //声明最小公倍数函数
main()
{
int a,b,gy,gb;
printf("输入两个整数:\n");
scanf("%d%d",a,b);
gy=fun_gy(a,b); //调用最大公约数函数
gb=fun_gb(a,b); //调用最小公倍数函数
printf("最大公约数是:%d\n最小公倍数是:%d\n",gy,gb);
}
int fun_gy(int x,int y)
{
int z,i;
if(xy)
z=sqrt(y);
else
z=sqrt(x);
for(i=z;i=1;i--)
{
if(x%i==0y%i==0)
break;
}
return i;
}
int fun_gb(int x,int y)
{
int z,i;
z=x*y;
for(i=x;i=z;i++)
{
if(i%x==0i%y==0)
break;
}
return i;
}
程序运行结果:
扩展资料:
这里涉及到了最大公约数和最小公倍数的计算方法:
我们知道两个整数的最小公倍数等于他们的乘积除以他们的最大公约数。所以关键还是最大公约数的计算。
辗转相除法(求最大公约数):
假设求a,b的最大公约数,则:
(1)a除以b取余得c,若c=0,则b即为两数的最大公约数,输出,结束。
(2)若c != 0,则将b赋给a,c赋给b再返回上一步操作,继续执行。
例如,求30和98的最大公约数,过程如下:
90%30 = 8;
30%8 = 6;
8%6 = 2;
6%2 = 0;
所以最大公约数为2。
如图使用辗转相除法求最小公倍数:
方法步骤:
一、打开VC2010(或其他C语言编译器),新建项目-选择Win32为控制台应用程序-命名-确定
二、选择源文件-添加-新建项
三、选择C++文件-命名.c-添加
四、输入如下程序
#include stdio.h
int main()
{
int a,b,A,B;
int lol,lpl;
printf ("输入两个整数:\n");
scanf ("%d%d",a,b);
A=a;
B=b;
if(B)
while((A %= B) (B %= A));
lol = A+B;
lpl = a*b/lol;
printf ("最小公倍数为:%d\n", lpl);
return 0;
}
五、按键Ctrl+F5开始执行(不调试),输入两个整数之间用空格隔开,回车即可得到两个整数的最小公倍数
扩展资料:
辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。
它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
两个数的最大公约数是指能同时整除它们的最大正整数。
设两数为a、b(a2b),求a和b最大公约数(a,b)的步骤如下:
(1)用a除以b(a2b),得a÷b=q..n(0≤n)。
(2)若rn=0,则(a,b)=b;
(3)若r10,则再用b除以n,得b÷n=q..2(0sr2)
(4)若r2=0,则(a,b)=rn;若r20,则继续用r1除以r2,.…,如此下去,直到能整除为止。
其最后一个余数为0的除数即为(a,b)的最大公约数。