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;
    }

     

  • 相关阅读:
    LeetCode Flatten Binary Tree to Linked List
    LeetCode Longest Common Prefix
    LeetCode Trapping Rain Water
    LeetCode Add Binary
    LeetCode Subsets
    LeetCode Palindrome Number
    LeetCode Count and Say
    LeetCode Valid Parentheses
    LeetCode Length of Last Word
    LeetCode Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/LETTers/p/2452696.html
Copyright © 2011-2022 走看看