您的位置:首页 > 其它

求n个数的最小公倍数(数值范围的控制)

2015-01-16 21:29 127 查看

Description

求n个数的最小公倍数。

INPUT

输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。

OUTPUT

为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。

SAMPLE INPUT

2 4 6
3 2 5 7


SAMPLE OUTPUT

12
70


解题心得: 本来是很简单的题的,可是由于没有适当的控制算法,导致结果溢出。

AC代码:

1 #include<stdio.h>
2 long int digit[1002];
3 int f(int a,int b)//寻找a,b最小公倍数
4 {
5     int max,min;
6     if(a>b){
7         max=a;
8         min=b;
9     }
10     else
11     {
12         max=b;
13         min=a;
14     }
15     while(1){
16         int temp=max%min;
17         if(!temp) return ((long int)a*(double)(b/min));
18         //上面必须先除以min然后才乘以a,要不然要溢出
19         max=min;
20         min=temp;
21     }
22 }
23 void ans(int x)//递归求最小公倍数,循序渐进,类似二分
24 {
25     if(x==1)
26         return;
27     int i,k=0;
28     for(i=0;i<x-1;i+=2)
29         digit[k++]=f(digit[i],digit[i+1]);
30     if(x%2)
31         digit[k++]=digit[x-1];
32     ans(k);
33 }
34 int main()
35 {
36     int n;
37     while(scanf("%d",&n)!=EOF){
38         int i;
39         for(i=0;i<n;i++)
40             scanf("%ld",&digit[i]);
41         ans(n);
42         printf("%ld\n",digit[0]);
43     }
44     return 0;
45 }


分析图片:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐