HDOJ_2028(Lowest Common Multiple Plus)

来源:互联网 发布:淘宝未激活官换机 编辑:程序博客网 时间:2024/06/04 18:18

HDOJ_2028(Lowest Common Multiple Plus)


Problem Description
求n个数的最小公倍数。
 Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
 Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。
 Sample Input
2 4 63 2 5 7
 Sample Output
1270
思路:原理求两个数(a,b)的最小公倍数,然后再用求得的最小公倍数与另外一个整数组合再求最小公倍数,通过for循环依次执行,最后便求得所有数的最小公倍数。在求两个数的最小公倍数时,先找到两个数的最大公约数。而在求最大公约数时倒序查找,即从两个整数(a,b)中的较小者开始查找,令i=较小者,当满足a%i==0&&b%i==0时,说明i即为要找的最大公约数,若不满足,则i - -,再判断是否满足a%i==0&&b%i==0,直到找到最大公约数,若i==1时,说明a,b最大公约数为1,即最大公倍数为a*b.


My  solution:

/2015.10.10/

#include<stdio.h>int time(int a,int b)/*求最小公倍数*/ {int t,i;if(a<b){t=a;a=b;b=t;}for(i=b;i>1;i--)if(b%i==0&&a%i==0)break;if(i==1)return a*b;elsereturn a/i*b;//注意:不能写a*b/i,a*b/i的结果可能会超出int的范围 }                //刚开始这样写一直w,最后看到别人的博客,才注意到这点int main(){int a[1000];int t,i,timesum,min1;while(scanf("%d",&t)==1){for(i=0;i<t;i++)scanf("%d",&a[i]);timesum=a[0];for(i=1;i<t;i++)timesum=time(timesum,a[i]);printf("%d\n",timesum);}return 0;}


0 0
原创粉丝点击