[C语言][PTA][2019Fall] 7-26 最大公约数和最小公倍数 (15 point(s))

By | October 31, 2019

声明

这是 拼题A(PTA)《中M2019秋C入门和进阶练习集》的习题。原题在 https://pintia.cn/problem-sets/1163286449659043840/problems/1174288506294865974 (侵删)
本人的答案仅供交流学习,请勿用于当作答案来提交!

题目描述

7-26 最大公约数和最小公倍数 (15 point(s))
本题要求两个给定正整数的最大公约数和最小公倍数。

输入格式:
输入在一行中给出两个正整数M和N(≤1000)。

输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。

输入样例:
511 292
输出样例:
73 2044

我的答案

/*================================================================
*   Copyright (C) 2019 Navin Xu. All rights reserved.
*   
*   Filename    :7-26-最大公约数和最小公倍数.c
*   Author      :Navin Xu
*   E-Mail      :admin@navinxu.com
*   Create Date :2019年10月31日
*   Description :
================================================================*/
#include <stdio.h>

// 求最大公约数
int getGcd(int num1, int num2);
// 求最小公倍数
int getLcm(int num1, int num2);

int main() {

    int M, N;
    scanf("%d %d", &M, &N);

    if (M > 0 && N >0 && M <= 1000 && N <= 1000) {
        int gcd = getGcd(M, N);
        int lcm = getLcm(M, N);

        printf("%d %d", gcd, lcm);
    }




    return 0;
}

int getLcm(int num1, int num2) {
    int max = (num1 > num2) ? num1 : num2;
    int min = (num1 > num2) ? num2 : num1;
    int lcm = max;

    for (int i = max; i <= max * min; i += max) {
        if ((i % max == 0) && (i % min == 0)) {
            lcm = i;
            break;
        }
    }

    return lcm;
}

int getGcd(int num1, int num2) {
    int gcd, index; 
    int min = (num1 > num2) ? num2 : num1;
    int max = (num1 > num2) ? num1 : num2;

    if (max % min == 0) {
        gcd = num1;
    } else {
        for (index = 2, gcd = 1; index <= min / 2; ++ index) {
            if (num1 % index == 0 && num2 % index == 0) {
                gcd = index;
            }
        }
    }

    return gcd;
}

鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,也欢迎指正,一起学习,共同进步。如果本文对您有帮助,而且让您觉得值得为内容付费,那么就请赞助(打赏)一下本人,这不强制。打赏支持微信支付,方法是使劲地戳一下下方的“打赏”按钮,然后得到微信收款的二维码,再用微信支付扫一下,就像买菜那样。祝好!