求两个正整数的最大公约数 C语言 源代码 调试测试

本文介绍并实现求解两个正整数的最大公约数和最小公倍数的三种不同算法:辗转相除法、穷举法和辗转相减法。每种算法都提供了详细的源代码和流程说明,帮助读者深入理解算法原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:求两个正整数的最大公约数和最小公倍数。
基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。
提高要求:1.三种以上算法解决两个正整数最大公约数问题。
2.求3个正整数的最大公约数和最小公倍数。

一、辗转相除法
源代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int max = 0;
    int min = 0;
    int temp = 0;
    int mul = 0;
    printf("Please enter two num:\n");
    scanf("%d %d", &max, &min);
    mul = max * min;
    if (max < min)//找到最大的数
    {
        temp = max;
        max = min;
        min = temp;
    }
    while (max % min != 0)//辗转相除
    {
        temp = min;
        min = max % min;
        max = temp;
    }
    printf("最大公约数:%d\n", min);
    printf("最小公倍数:%d\n", mul/min);
    system("pause");
    return 0;
}

流程图:
这里写图片描述

调试图:

这里写图片描述

测试图:

这里写图片描述

二、穷举法
源代码:

#include<stdio.h>

void main()
{
    int temp=0,a,b;
    printf("请输入要求最大公约数的两个数:\n");
    scanf("%d %d",&a,&b);
    if(a<b){   //保证a>b
        a=a^b; //用异或法交换a,b的值
        b=a^b;
        a=a^b;
    }
    for(temp=b;;temp--){  //用穷举法求最大公约数
        if(a%temp==0&&b%temp==0)
            break;
    }
    printf("最大公约数为:%d\n",temp);
}

流程图:

这里写图片描述
调试:

这里写图片描述

测试:

这里写图片描述

三、辗转相减法
源代码:

#include <stdio.h>
int main()
{
    int a,b;
    printf("请输入要求最大公约数的两个数:\n");
    scanf("%d %d",&a,&b);
    while(a!=b)
    {
        if(a>b)
        {
            a = a - b;
        }
        else
            b = b - a;
    }
    printf("最大公约数为:%d\n",a);
    return 0;
}

流程图:
这里写图片描述
调试:
这里写图片描述
测试:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值