HDU_oj_2028 Lowest Common Multiple Plus

Problem Description
 
求n个数的最小公倍数。
 
Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
 
Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。
 
Sample Input
2 4 6
3 2 5 7
 
Sample Output
12
70
 
分析:
以下链接有详细算法,此题选用最常用的辗转相除法
注意点:
在进行最小公倍数计算时,
两数相乘再除以最大公倍数可能会导致相乘后超出32位而错误
所以改变下运算顺序可解决
 
 
 1 #include<iostream>
 2 using namespace std;
 3 
 4 //辗转相除法
 5 //非递归 
 6 int Gcd(int m,int n)
 7 {
 8     while(n!=0)
 9     {
10         int temp=n;
11         n=m%n;
12         m=temp;
13     }
14     return m;
15 }
16 int main()
17 {
18     int n;
19     int v,c,d;
20     while(cin>>n)
21     {
22         cin>>v;
23         while(--n)
24         {
25             cin>>c;
26             d=Gcd(v,c);
27             //v=v*d/c; 
28             //若要为注释的表达式可能会导致超出32位 
29             v=v/d*c;  
30         }
31         cout<<v<<endl;
32     }
33 }
 
 
 
 
原文地址:https://www.cnblogs.com/tenjl-exv/p/7994625.html