C语言写两个函数,分别求两个整数的最大公约数和最小公倍数

题目描述:

写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。变量类型使用long long int 。

输入两个正整数

输出最大公约数最小公倍数

如果输入的数中包含负数,则输出工nput Eeror

样例输入:

6 15

样例输出:

3 30

提示:

负数没有最大公约数和最小公倍数;

最大公约数和最小公倍数一定为正数,不可以为负数;

需要考虑代码运行效率,否则会评测超时。

源代码

#include <stdio.h>

// 求最大公约数的函数
long long int gcd(long long int a, long long int b) {
    if (b == 0) {
        return a;
    }
    return gcd(b, a % b);
}

// 求最小公倍数的函数
long long int lcm(long long int a, long long int b) {
    return a * b / gcd(a, b);
}

int main() {
    long long int a, b;
    scanf("%lld %lld", &a, &b);

    if (a <= 0 || b <= 0) {
        printf("Input Error");
        return 0;
    }

    // 求最大公约数和最小公倍数
    long long int g = gcd(a, b);
    long long int l = lcm(a, b);

    // 输出结果
    printf("%lld %lld\n", g, l);

    return 0;
}

该程序定义了两个函数 gcd()lcm(),用于分别求两个整数的最大公约数和最小公倍数。在主函数中,首先通过 scanf() 函数读取输入数据,并对输入数据进行判断,若输入数据中包含负数或者有 0,直接输出 “Input Error” 并结束程序。然后调用 gcd()lcm() 函数求出最大公约数和最小公倍数,并使用 printf() 函数输出结果。

gcd() 函数中,采用递归方式求取最大公约数。若 b 为 0,则说明 a 是最大公约数;否则继续递归调用 gcd(b, a % b)

lcm() 函数中,先求出两个数的最大公约数,然后将两数相乘再除以最大公约数,即可得到最小公倍数。

注意,在本题中,需要注意输入数据中是否包含负数或者 0,若包含则输出 “Input Error”。此外,题目要求变量类型使用 long long int,以避免整数溢出。

© 版权声明
THE END
喜欢就支持一下吧
点赞15赞赏 分享