1020: 求两整数的最大公约数和最小公倍数

版权声明:看看就好,如需转载,注明一下出处 https://blog.csdn.net/sinat_34337520/article/details/89018588

Description

输入两个正整数m和n,求其最大公约数和最小公倍数。

Input

两个整数

Output

最大公约数,最小公倍数

Sample Input

5 7

Sample Output

1 35

版本1:常规for 

#include <stdio.h>
#include <stdlib.h>

//greatest common divisor(gcd)
//lowest common multiple(lcm)
//版本1:常规for
int main()
{
    int i, m, n, gcd=1, lcm=1;
    scanf("%d %d", &m, &n);
    for(i=1; i<=m&&i<=n; i++)
    {
        if(m%i==0 && n%i==0)
            gcd = i;
    }
    lcm = m*n/gcd;
    printf("%d %d", gcd, lcm);
    return 0;
}

 

版本2: while循环减法,最后得到最大公约数

版本2+:使用正负数

#include <stdio.h>
#include <stdlib.h>

//版本2:while循环减法,最后得到最大公约数
int main()
{
    int m, n, s, gcd=1, lcm=1;
    scanf("%d %d", &m, &n);
    s = m*n; //提前保存
    while(m != n)
    {
        if(m > n)
            m -= n;
        else
            n -= m;
    }
    gcd = m;
    lcm = s/gcd;
    printf("%d %d", gcd, lcm);
    return 0;
}

//版本2+:使用正负数
int main()
{
    int m, n, s, gcd=1, lcm=1;
    scanf("%d %d", &m, &n);
    m = (m>0)? m:-m;
    n = (n>0)? n:-n;
    s = m*n; //提前保存
    while(m != n)
    {
        if(m > n)
            m -= n;
        else
            n -= m;
    }
    gcd = m;
    lcm = s/gcd;
    printf("%d %d", gcd, lcm);
    return 0;
}

版本3:递归 

#include <stdio.h>
#include <stdlib.h>

//greatest common divisor(gcd)
//lowest common multiple(lcm)
//版本3:递归
int hcf(int m, int n)
{
    if(n != 0)
        return hcf(n, m%n);
    else
        return m;
}

int main()
{
    int m, n, gcd=1, lcm=1;
    scanf("%d %d", &m, &n);
    m = (m>0)? m:-m;
    n = (n>0)? n:-n;
    gcd = hcf(m, n);
    lcm = m*n/gcd;
    printf("%d %d", gcd, lcm);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sinat_34337520/article/details/89018588