码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-01-16 22:12:22      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:

 

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 }

 

分析图片:

 

技术分享

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

标签:

原文地址:http://www.cnblogs.com/yanglingwell/p/4229807.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!