• LETTers比赛第三场 1001 Least Common Multiple 解题报告


    提交人:侯建鹏

    提交日期:2012/4/16

    1001 Least Common Multiple

      这道题求解的是几个数的最小公倍数,我的想法是先求前两个数的最小公倍数,再求的得到的这个数和第三个数的最小公倍数,以此类推。

    求解两个数a和b的最小公倍数d的方法:

    1、  用辗转相除法求出这两个数的最大公约数,记为c。

    2、  则最小公倍数d=(a/c)*b。

    特别注意的问题:为什么d=(a/c)*b而不是d=(a*b)/c?

      因为a和b都是32bit的数字,如果先执行a*b很可能会超出32bit的存储范围而发生错误,所以先除再乘。(当然,如果你用的是__int64,可以忽略这个问题)

    #include<stdio.h>
    
    int number[1010];
    
    int MD(int a , int b )
    {
        int r=a%b;
        while(r)
        {
            a=b;
            b=r;
            r=a%b;
        }
        return b;
    }
    
    int main()
    {
        //freopen("input.txt","r",stdin);
        int cas,num,md,i;
        scanf("%d",&cas);
        while(cas--)
        {
            scanf("%d",&num);
            for(i=0;i<num;i++)
            {
                scanf("%d",&number[i]);
                if(i!=0)
                {
                    md=MD(number[i-1],number[i]);
                    number[i]=number[i-1]/md*number[i];
                }
            }
            printf("%d\n",number[num-1]);
        }
        return 0;
    }

     

  • 相关阅读:
    前端基础进阶变量对象详解
    伪元素::before与::after的用法
    网站性能优化你需知道的东西
    Python爬虫音频数据
    python一步高级编程
    Android APK打包流程
    软件漏洞学习
    pycrypto 安装
    ubuntu16.04中将python3设置为默认
    Android NDK 编译选项设置[zhuan]
  • 原文地址:https://www.cnblogs.com/LETTers/p/2452696.html
Copyright © 2020-2023  润新知