zoukankan      html  css  js  c++  java
  • 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;
    }

     

  • 相关阅读:
    软件工程 实验二 结对编程(第一阶段)
    C#中的线程(一)入门
    C# Using与Try..Finally 语句探究
    中兴一面归来
    Log4Net 入门示例
    C++ 临时对象
    C宏定义探析
    MFC 对话框 快捷键设置(alt+s)
    C#中的线程(二) 线程同步基础
    Ip地址的正则表达式
  • 原文地址:https://www.cnblogs.com/LETTers/p/2452696.html
Copyright © 2011-2022 走看看