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