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

该博客介绍了一种用C语言实现求解两个正整数最大公约数(GCD)和最小公倍数(LCM)的方法,包括辗转相除法、相减法和穷举法。通过用户界面,可以选择不同的计算方式,并提供键盘输入两个正整数的交互功能。

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

//求两个正整数的最大的公约数和最小公倍数
#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");
	 }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值