C语言刷题笔记 _ 求最大公约数和最小公倍数(辗转相除法)

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

最大公约数(辗转相除法)

1.大数 ÷ 小数,余数= 0,则小数为两者的最大公约数

2.大数 ÷ 小数,余数 ≠ 0,让小数成为大数,余数成为小数,再次计算大数 ÷ 小数,

如果余数 ≠ 0,继续重复以上步骤,直到余数 = 0,此时的小数就为最大公约数

最小公倍数

最小公倍数= (大数 × 小数)÷ 最大公约数

#include <stdio.h>

// 函数:MaxAndMin
// 功能:比较两个整数指针所指向的值,如果 max 小于等于 min,则交换它们的值。
void MaxAndMin(int *max, int *min) {
    if (*max <= *min) {
        int temp = *max;   // 使用临时变量 temp 存储 max 的值
        *max = *min;       // 将 min 的值赋给 max
        *min = temp;       // 将 temp(即原来的 max 值)赋给 min
    }
}

int main() {
    int max, min, product;

    // 提示用户输入两个正整数
    printf("Please enter two positive integers:\n");
    scanf("%d%d", &max, &min);

    // 调用 MaxAndMin 函数,确保 max >= min
    MaxAndMin(&max, &min);
    printf("max = %d, min = %d\n", max, min);

    // 计算两个数的乘积,用于之后计算最小公倍数
    product = max * min;

    // 使用辗转相除法(欧几里得算法)计算最大公约数
    // 循环条件:当 max 不能被 min 整除时继续循环
    for (int temp; (max % min) != 0; ) {
        temp = max;        // 保存当前的 max 值
        max = min;         // 更新 max 为 min 的值
        min = temp % max;  // 更新 min 为 max 对 min 取余的值
    }

    // 当循环结束时,余数为 0,min 是最大公约数
    printf("最大公约数是 : %d\n", min);

    // 最小公倍数 = 两数乘积 / 最大公约数
    printf("最小公倍数是 : %d\n", product / min);

    return 0;
}

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值