杭电acm2028

http://acm.hdu.edu.cn/showproblem.php?pid=2028

逐个用辗转相除法算出最小公倍数,直至结束,但是因为中间结果有可能超过32位,所以必须相除后乘,只是这里不懂为什么改了long long还是错掉

r=a%b;
while(r)
{
a=b;
b=r;
r=a%b;
}

结果b是最大公约数,最小公倍数就是原来ab的积除以b

View Code
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int s[100000];
 4 int pro(int a,int b)
 5 {
 6     int t,r,j,a0,b0;
 7     if(a<b)
 8     {
 9         t=a;
10         a=b;
11         b=t;
12     }
13     a0=a;
14     b0=b;
15     t=b;
16     r=a%b;
17     while(r)
18     {
19         a=b;
20         b=r;
21         r=a%b;
22     }
23     r=a0*(b0/b);
24     return r;
25 }
26 int main()
27 {
28     int n,i,j,a;
29     while(scanf("%d",&n)!=EOF)
30     {
31         a=1;
32         for(i=0;i<n;i++)
33             scanf("%d",&s[i]);
34         for(i=0;i<n;i++)
35             a=pro(a,s[i]);
36         printf("%d\n",a);
37     }
38 return 0;
39 }
原文地址:https://www.cnblogs.com/huzhenbo113/p/3003041.html