1.29日的重新理解
题目:http://codeup.hustoj.com/problem.php?cid=100000589&pid=0
代码和注意的细节如下:
#include <cstdio> #include <iostream> #include <cstring> #include <iostream> using namespace std; int a[10005]; int gcd(int a,int b){ if(b==0){ return a; }else{ return gcd(b,a%b); } } //做不出来的原因,找不准多个数之间的最小公倍数之间的关系。 //实际上这一组数的最小公倍数,一定要是任意两个数字的最小公倍数的公倍数 //所以按顺序求出每两个数字的最小公倍数,并将该最小公倍数当作新的数,与下一个数进行求最小公倍数,直到最后一个数字 int main(){ int t; scanf("%d",&t); while(t--){ int n; cin>>n; int d=1; //小技巧,可以把 d 设置成 1 d之后为每个两个数的最小公倍数 for(int i=0;i<n;i++) { int x; cin>>x; d=d/gcd(d,x)*x; //第一次时 gcd=1 所以第一个最小公倍数就是第一个输入的数罢了。 //每次先求两个数之间的最小公倍数,然后将这个最小公倍数当作一个新的数与下一个输入的数进行求最小公倍数 //一直利用防溢出的方法求最小公倍数 } cout<<d<<endl; } return 0; }