求最大公约数,最小公倍数(c语言多种方法实现)

/*
*   最大公约数:辗转相除法实现 辗转相减法实现 穷举法实现
*   最小公倍数:穷举法实现
*   @author 李政 <1244109467@qq.com>
*/

#include <stdio.h>
int x,y,temp;

//最大数的交换函数
int max(int *x,int *y)
{
    if(*x < *y)
    {
        temp = *x;
        *x = *y;
        *y = temp;
    }

}
//辗转相除法实现
int Division(int x,int y)
{
    max(&x,&y); //调用交换最大值函数

    while(x % y != 0)//直到余数为0,最大公约数为上一步的余数
    {
        temp = x%y;
        x = y;
        y = temp;
    }
    printf("最大公约数为:%d\n",y);
    return 0;
}
//辗转相减法实现
int Subtract(int x,int y)
{
    while(1)
    {
        if(x>y)
        {
            x=x-y;
        }
        else if(y>x)
        {
            y=y-x;
        }
        else
        {
            printf("最大公约数为:%d\n",x);
            break;
        }
    }
    return 0;
}
//穷举法实现
int Exhaus(int x,int y)
{
    max(&x,&y);//使y为最小的数

    for( temp = y; x%temp || y%temp; temp-- ); //两个数如果都能整除则为最大公约数
    printf("最大公约数为:%d\n",temp);
    return 0;
}
int main()
{
    int num=0;
    int a,b,i;
    printf("求两个数的最大公约数:\n");
    printf("请输入两个数:\n");
    scanf("%d %d",&x,&y);
    a=x;
    b=y;
    printf("***请选择您要的方法***:\n");
    printf("***1-----辗转相除法***\n");
    printf("***2-----辗转相减法***\n");
    printf("***3-----性质穷举法***\n");
    while(num<1 || num>3)
    {
        scanf("%d",&num);
        if(num<1||num>3)
        {
            printf("请重新输入:\n");
        }
    }
    switch(num)
    {
        case 1: Division(x,y);break;
        case 2: Subtract(x,y);break;
        case 3: Exhaus(x,y);break;
    }
    max(&a,&b);
    printf("\n求两个数的最小共倍数:\n");
    for( i=a; ; i++ )
    {
        if( i%a==0 && i%b==0 )
        {
            printf("最小共倍数:%d\n",i);
            break;
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42205987/article/details/82083999
今日推荐