从键盘输入两个正整数,求它们的最大公约数和最小公倍数

时间:2022-05-24 19:02:44
//求两个正整数的最大的公约数和最小公倍数
#include<stdio.h>
#include<stdlib.h> 
int k=1;
void divide();
void  subtract();
void enumerate();
void menu();           
void divide()         //辗转相除法  
{	
        int a,b,c,x,y;
        printf("请从键盘输入两个正整数:\n");
        scanf("%d%d",&a,&b);
	c=a*b;
	if(a<b)
	{
		y=a;
		a=b;
		b=y;
	}
        x=a%b;
 	while(x)
	{
  		a=b;
		b=x;
		x=a%b;
	}
   	printf("最大公约数为:%d\n",b);
   	printf("最小公倍数为:%d\n",c/b);
}
 
void  subtract()        //相减法
{
	int a,b,x,y;
	printf("请从键盘输入两个正整数:\n");
        scanf("%d%d",&a,&b);
	x=a;
	y=b;
	while(a!=b)
        if(a>b)
		a=a-b;
	else 
		b=b-a;

	printf(" 最大公约数为:  %d\n",a);
        printf("最小公倍数为: %d\n",x*y/a);
}

void enumerate()       //穷举法
{
	int a,b,c,d,x,y;
	printf("请从键盘输入两个正整数:\n");
        scanf("%d%d",&c,&d);
	a=c;
	b=d;
        for(x=1;x<=c;x++)
        if(c%x==0 && d%x==0)
        y=x;
    	printf("最大公约数为:%d\n",y);
        printf("最小公倍数为:%d\n",a*b/y);
}        
int main()             //定义界面函数 
{     
  	while(k)
	{
	menu();
	}
	return 0;
}
void   menu()           //用户界面
{  
	int code;
	printf("\n");	
	printf("              *********************************\n");
	printf("              #                               #\n");
	printf("              #求两整数最大公约数和最小公倍数 #\n");
	printf("              ********************************#\n");
	printf("              #                               #\n");
	printf("              #      0.辗转相除法             #\n");
	printf("              #                               #\n");
	printf("              #          1.相减法             #\n");
	printf("              #                               #\n");
	printf("              #          2.穷举法             #\n");
	printf("              #                               #\n");
	printf("              #        3.退出系统             #\n");
	printf("              *********************************\n");  
	printf("-----------------------------------------------\n");
	printf("                     请选择菜单编号:");
	scanf("%d",&code);
	printf("\n");
	switch(code)       //选择以何种方法计算
	{	 
	 case 0:
		      divide();break; 
	 case 1:
		      subtract();break;
	 case 2:
		      enumerate (); break;
         case 3:
		      k=0;break;
	 default:
		printf("请在0-3之间选择\n");
	 }
}