求两个正整数的最大公约数和最小公倍数。

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

#include<stdio.h>
//#include<stdlib.h>
int main()
{
    int n = 0;
    int m = 0;
    int temp = 0;
    int l = 0;
    printf("请输入两个整数:\n");
    scanf("%d %d", &n, &m);
    l = n * m;
    if (n < m)//找到最大的数
    {
        temp = n;
        n =m;
        m = temp;
    }
    while (n %m != 0)//辗转相除
    {
        temp = m;
        m = n % m;
        n = temp;
    }
    printf("最大公约数:%d\n",m);
    printf("最小公倍数:%d\n", l/m);
    return 0;
}

结果截屏:
这里写图片描述
调试截屏:
这里写图片描述
算法设计图:
这里写图片描述

第二种:穷举法

#include<stdio.h>
void main()
{
    int temp=0,n,m;
    int t;
    printf("请输入两个整数:\n");
    scanf("%d %d",&n,&m);
    if(n<m){   //判断n,m的大小
       t = n;
       n= m;
       m= t;
    }
    for(temp=m;;temp--){  //用穷举法求最大公约数
        if(n%temp==0&&m%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;
}

算法设计图:这里写图片描述
结果截屏:
这里写图片描述
调试截屏:这里写图片描述

猜你喜欢

转载自blog.csdn.net/foxANDbee/article/details/82531901