7-26 最大公约数和最小公倍数 (15 point(s))

By | 最新修改:2024-08-17

声明

这是 拼题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 程序知路. All rights reserved.
*   
*   Filename    :7-26-最大公约数和最小公倍数.c
*   Author      :程序知路
*   E-Mail      :admin@icxzl.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;
}


程序知路

鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。

本文章可以转载,但是需要说明来源出处!

本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com