标签:
解题心得: 本来是很简单的题的,可是由于没有适当的控制算法,导致结果溢出。
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 }
分析图片:
标签:
原文地址:http://www.cnblogs.com/yanglingwell/p/4229807.html