ForIUIU


私信TA

用户名:dotcpp0612433

访问量:166

签 名:

等  级
排  名 23367
经  验 637
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

关于最大公因数:正确的表述应该是最大公因数是能够同时整除 a 和 b 的最大正整数。


关于最小公倍数:正确的表述应该是最小公倍数是能够同时被 a 和 b 整除的最小正整数。


首先,通过用户输入获取两个正整数 a 和 b 。

为了找到最大公约数,先确定两个数中的较小值 min 。然后从 min 开始递减遍历,找到第一个能同时整除 a 和 b 的数,即为最大公约数 glc ,找到后通过 break 语句结束循环。

对于最小公倍数,先确定两个数中的较大值 max 。然后从 max 开始递增遍历,找到第一个能同时被 a 和 b 整除的数,即为最小公倍数 lcm ,找到后通过 break 语句结束循环。


注意事项:

1.在输入两个数时,要确保输入的是正整数,否则可能导致计算错误。

2.计算最大公约数和最小公倍数的循环边界需要根据数学原理合理设置,以避免出现死循环或错误的结果。



参考代码:

#include <stdio.h>
/*
 * 输入两个正整数m和n,求其最大公约数和最小公倍数。
 * */
int main() {
    int a, b;
    scanf("%d%d", &a, &b);
    int max = (a > b)? a : b;
    int min = (a > b)? b : a;
    int glc = 0, lcm = 0;
    for (int i = min; i >= 1; i--) {//最大公约数一定不会大于两个数中的较小值。因为如果一个数能同时整除两个数,那么它一定小于或等于两个数中的较小值。
        if (a % i == 0 && b % i == 0) {
            glc = i;
            break;
        }
    }

    for (int i = max; i <= a * b; ++i) {//因为两个数的最小公倍数一定大于等于两个数中的较大值。
        if (i % a == 0 && i % b == 0) {
            lcm = i;
            break;
        }
    }
    printf("%d %d\n", glc, lcm);
}


 

0.0分

0 人评分

  评论区

  • «
  • »