• HDU2028Lowest Common Multiple Plus


    需要注意的是,虽然最后输出为32位整数,但是a*b可能会超出int范围(最小公倍数=a*b/a和b最大公约数)

    在此提供两个写法都可以AC:


     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include <stdio.h>
    int gcd(int a,int b)
    {
        int temp;
        if(a<b)
        {
            temp=a;
            a=b;
            b=temp;
        }
        if(b==0) return a;
        else return gcd(b,a%b);
    }
    int main()
    {
        int n,s;
        long long t,k;
        int i;
        while(scanf("%d",&n)!=EOF)
        {
            t=0;
            k=1;
            for(i=1;i<=n;i++)
            {
                scanf("%d",&s);
                t=s*k/gcd(s,k);//s*k可能超出int范围 
                k=t;        
            }
            printf("%lld
    ",t);
        }
        return 0;
    }

    第二个就是把计算顺序改下,先除再乘,即a*b/c==b/c*a,计算最大公约数的方法相同就不写了

    1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    int main()
    {
        int n,s;
        int t,k;
        int i;
        while(scanf("%d",&n)!=EOF)
        {
            t=0;
            k=1;
            for(i=1;i<=n;i++)
            {
                scanf("%d",&s);
                t=k/gcd(s,k)*s;
                k=t;        
            }
            printf("%d
    ",t);
        }
        return 0;
    }

  • 相关阅读:
    qsort()的使用
    c语言不寻常的类型转换(类型提升)
    堆栈段的三个主要用途
    区分 声明与定义
    宏定义陷阱与typedef
    约瑟夫环解决方案
    线程中断测试
    Redis
    本地缓存
    tomcat优化
  • 原文地址:https://www.cnblogs.com/cnlik/p/11851909.html
Copyright © 2020-2023  润新知