求多个数的最大公约数和最小公倍数
涉及到的知识vector:
1, 向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版.
2, 在使用它时, 需要包含头文件 vector, #include
3,优点:
vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所要放入的元素。此外, vector 也提供了许多的方法来对自身进行操作。
4. 初始化方式:
(1)
vector a ; //声明一个int型向量a
vector a(10) ; //声明一个初始大小为10的向量
vector a(10, 1) ; //声明一个初始大小为10且初始值都为1的向量
vector b(a) ; //声明并用向量a初始化向量b
vector b(a.begin(), a.begin()+3) ; //将a向量中从第0个到第2个(共3个)作为向量b的初始值
(2)使用数组来初始化向量:
例如:
int n[] = {1, 2, 3, 4, 5} ;
vector a(n, n+5) ; //将数组n的前5个元素作为向量a的初值
vector a(&n[1], &n[4]) ; //将n[1] - n[4]范围内的元素作为向量a的初值
5,可以用cin进行输入,cout进行输出。
一.题目
基本要求: 求N个数的最大公约数和最小公倍数。用C或C++或java或python语言实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.提供友好的输入输出,并进行输入数据的正确性验证。
二.分析过程及代码
分别定义两个函数,用来求两个数的最大公约数和最小公倍数(辗转相除法):
1.求两个数的最大公约数
其算法过程为:
前提:设两数为a,b设其中a 做被除数,b做除数,temp为余数
1、大数放a中、小数放b中;
2、求a/b的余数;
3、若temp=0则b为最大公约数;
4、如果temp!=0则把b的值给a、temp的值给a;
5、返回第二步;
/*求多个数的最大公约数*/
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); /*返回最大公约数到调用函数处*/
}
2,求多个数的最小公倍数
/*求多个数的最小公倍数*/
int multiple(int a,int b)
{
int i,t;
if(a<b)
{
t=a;
a=b;
b=t;
}
for(i=a;i<=a*b;i+=a)
{
if(i%b==0)
break;
}
return(i);
}
3,定义主函数部分
设置两个vector,用来存放所要输入的数字,再用for()循环来求多个数的最大公约数和最小公倍数:
主要代码:
int main()
{
int n,m,i,j,k,f,p,q;
vector a(1000);
vector b(1000);
/*求多个数的最大公约数*/
cout<<"请输入n的值:";
cin>>n;
for(i=0;i<n;i++)
{
cout<<"请输入第"<<i+1<<"个数:";
cin>>a[i];
}
for(j=0;j<n;j++)
{
p=divisor(a[j],a[j+1]);
a[j+1]=p;
}
cout<<"输入的这"<<n<<"个数的最大公约数为:"<<p<<endl;
/*求多个数的最小公倍数*/
cout<<"请输入m的值:";
cin>>m;
for(k=0;k<m;k++)
{
cout<<"请输入第"<<k+1<<"个数:";
cin>>b[k];
}
for(f=0;f<m;f++)
{
p=divisor(b[f],b[f+1]);
b[f+1]=p;
}
cout<<"输入的这"<<m<<"个数的最大公约数为:"<<q<<endl;
}
三,程序流程图