/*
* 最大公约数:辗转相除法实现 辗转相减法实现 穷举法实现
* 最小公倍数:穷举法实现
* @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;
}
求最大公约数,最小公倍数(c语言多种方法实现)
猜你喜欢
转载自blog.csdn.net/weixin_42205987/article/details/82083999
今日推荐
周排行