Problem Description
求n个数的最小公倍数。
Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。
Sample Input
2 4 6 3 2 5 7
Sample Output
1270
分析:本题考察对于n个数求其最小公倍数,由于不确定n的大小所以两个一组进行求解;
求解有两个思路都能A过,但是遇到大数建议用后者。
思路1:
#include<stdio.h> int ff(int a,int b) //最小公倍数是较大者的倍数。 { int c; int temp; if(a>b) { temp=a;a=b;b=temp; } c=b; while(b%a!=0) { b+=c; } return b; } int main() { int n; int a,b,c; while(~scanf("%d",&n)) { scanf("%d",&a); for(int i=1;i<n;i++) { scanf("%d",&b); a=ff(a,b); } printf("%d\n",a); } return 0; }
思路2:
#include<stdio.h> int ff(int a,int b) { if(b==0) return a; return (b,b%a); } int main() { int n; int a,b,c; while(~scanf("%d",&n)) { scanf("%d",&a); for(int i=1;i<n;i++) { scanf("%d",&b); c=ff(a,b); a=a/c*b; //求出最大公约数,此处应先除后乘,否则超出范围。 } printf("%d\n",a); } return 0; }