杭电 2028 Lowest Common Multiple Plus

来源:互联网 发布:秋季淘宝网什么好卖 编辑:程序博客网 时间:2024/06/03 13:40

Lowest Common Multiple Plus

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 52396    Accepted Submission(s): 21736
Problem Description
求n个数的最小公倍数。
 
Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
 
Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。
 
Sample Input
2 4 63 2 5 7
 

Sample Output
12




#include<stdio.h>//Lowest Common Multiple Plusint main(){ int lcm(int a,int b); __int64 q[100],p; int n,i,j; while(EOF!=scanf("%d",&n))//第一次提交wa之后加了while,学长让我改的%I64d { if(n>1) scanf("%I64d%I64d",&q[0],&q[1]); else { scanf("%I64d",&q[0]);//学长说要考虑n=1的情况 printf("%I64d",q[0]); } p=lcm(q[0],q[1]);//最开始的两个先开始计算 if(n>2) for(j=2;j<n;j++) { i=2; scanf("%I64d",&q[i]); p=lcm(p,q[i]);//之后的与最开始得到的最小公倍数计算 i++; } printf("%d\n",p); } return 0;}int lcm(int a,int b)//求a和b的最小公倍数{ __int64 m,n,t; m=a;n=b; if(a<b) { t=a; a=b; b=t; } while(b!=0) { t=a%b; a=b; b=t; } t=m*(n/a);//学姐的点睛之笔!!!!直接用a*b/最大公约数的算法的话,a*b会超出32位!用a*(b/最大公约数)就不会超时了!!!! return t ; }

#include<stdio.h>//Lowest Common Multiple Plusint main(){    int lcm(int a,int b);    __int64 q[100],p;    int n,i,j;    while(EOF!=scanf("%d",&n))//第一次提交wa之后加了while,学长让我改的%I64d    {        if(n>1)            scanf("%I64d%I64d",&q[0],&q[1]);        else        {            scanf("%I64d",&q[0]);//学长说要考虑n=1的情况            printf("%I64d",q[0]);        }        p=lcm(q[0],q[1]);//最开始的两个先开始计算        if(n>2)            for(j=2;j<n;j++)            {                i=2;                scanf("%I64d",&q[i]);                p=lcm(p,q[i]);//之后的与最开始得到的最小公倍数计算                i++;            }            printf("%d\n",p);    }    return 0;}int lcm(int a,int b)//求a和b的最小公倍数{    __int64 m,n,t;    m=a;n=b;    if(a<b)    {        t=a;        a=b;        b=t;    }    while(b!=0)    {        t=a%b;        a=b;        b=t;    }    t=m*(n/a);//点睛之笔,不会超时了    return t ;    }

0 0
原创粉丝点击