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 }
分析图片:
时间: 2024-10-26 04:01:40