一.流程图
两种都用的是辗转相除法
最大公约数的流程图:
最小公倍数的流程图:
二.代码:
#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<string>
using namespace std;
int maxgysarray1(int a[],int); //求数组的最大公约数
int maxgysarray2(int a[],int); //求数组的最小公倍数
int divisor(int a,int b) //函数嵌套调用 最大公约数
{
int temp; //定义整型变量
if(a<b) //通过比较求出两个数中的最大值和最小值
{ temp=a;a=b;b=temp;} //设置中间变量进行两数交换
while(b!=0) //通过循环求两数的余数,直到余数为0
{
temp=a%b;
a=b; //变量数值交换
b=temp;
}
return (a); //返回最大公约数到调用函数处
}
#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<string>
using namespace std;
int maxgysarray1(int a[],int); //求数组的最大公约数
int maxgysarray2(int a[],int); //求数组的最小公倍数
int divisor(int a,int b) //函数嵌套调用 最大公约数
{
int temp; //定义整型变量
if(a<b) //通过比较求出两个数中的最大值和最小值
{ temp=a;a=b;b=temp;} //设置中间变量进行两数交换
while(b!=0) //通过循环求两数的余数,直到余数为0
{
temp=a%b;
a=b; //变量数值交换
b=temp;
}
return (a); //返回最大公约数到调用函数处
}
int multiple(int a,int b) //自定义函数求两数的最小公倍数
{
int divisor(int a,int b); //自定义函数返回值类型
int temp;
temp=divisor(a,b); //再次调用自定义函数,求出最大公约数
return (a*b/temp); //返回最小公倍数到主调函数处进行输出
}
int maxgysarray(int a[],int num) //求数组的最大公约数
{
int max;
max=divisor(a[0],a[1]);
for(int i=1;i<=num-1;i++) max=divisor(max,a[i]);
return max;
}
int mingysarray(int a[],int num) //求数组的最小公倍数
{
int min;
min=multiple(a[0],a[1]);
for(int i=1;i<=num-1;i++) min=multiple(min,a[i]);
return min;
}
int main()
{
int x,y,m,n,i,a,b;
int abc[10]={6,18,24,36,42,48,60,72,78,96}; //定义数组
//int abc[25]={4,6,8,12,14,16,18,20,22,26,30,34,38,42,44,46,48,52,56,74,76,88,90,100,110};
for(m=0;m<15;m++ )
{
a=maxgysarray(abc,10);
//a=maxgysarray(abc,25);
b=mingysarray(abc,10);
//b=mingysarray(abc,25);
}
cout<<"这10组数的最大公约数为:"<<a<<endl;
cout<<"这10组数的最小公倍数为:"<<b<<endl;
//cout<<"这25组数的最大公约数为:"<<a<<endl;
//cout<<"这25组数的最小公倍数为:"<<b<<endl;
return 0;
}
三.调试
四.测试
五.总结
在上次求了最大公约数之后,这次求最大公约数与最小公倍数顺利很多,但在写程序过程中,我没有用随机数,而是采用数组,在程序中就将数据输入好,在外面直接计算。但这个过程有点繁琐,没有那种在外面输入,在外面求得方便。
在今后还应该学习随机数组,这个不仅效率快,而且所能计算的数据很大。比在数组中直接输入数据方便很多。