c++语言-求N个数的最大公约数与最小公倍数

一.流程图
两种都用的是辗转相除法
最大公约数的流程图:
在这里插入图片描述
最小公倍数的流程图:
在这里插入图片描述
二.代码:

#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;
}

三.调试
在这里插入图片描述
在这里插入图片描述
四.测试
在这里插入图片描述
在这里插入图片描述
五.总结
在上次求了最大公约数之后,这次求最大公约数与最小公倍数顺利很多,但在写程序过程中,我没有用随机数,而是采用数组,在程序中就将数据输入好,在外面直接计算。但这个过程有点繁琐,没有那种在外面输入,在外面求得方便。
在今后还应该学习随机数组,这个不仅效率快,而且所能计算的数据很大。比在数组中直接输入数据方便很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值