题目:从键盘输入两个整数,输出两个整数的最大公约数。用C或C++语言实现程序解决问题。
编辑人员:李林轩
时间:2017.3.20
程序算法
辗转相除法
有两整数a和b:
1.a%b得余数c
2.若c=0,则b即为两数的最大公约数
3. 若c≠0,则a=b,b=c,再回去执行1
相减法
有两整数a和b:
1.若a>b,则a=a-b
2. 若a<b,则b=b-a
3. 若a=b,则a(或b)即为两数的最大公约数
4. 若a≠b,则再回去执行1
穷举法有两整数a和b:
1. i= a(或b)
2. 若a,b能同时被i整除,则i即为最大公约数,结束
3. i--,再回去执行2
代码
#include<stdio.h>
#include<stdlib.h>
void help();
void menu();
void xiangjian();
void xiangchu();
void qiongju();
int q=1;
int main()
{
while(q)
{
menu();
}
system("pause");
return 0;
}
void help()
{
printf("欢迎使用最小公倍数计算系统\n");
printf("用0--4选择所要执行的操作\n");
printf("在输入的两个数字之间用逗号隔开\n");
printf("谢谢您的使用\n");
}
void xiangjian()//相减法求最大公约数
{
int a,b;
printf("请输入两个整数 :");
scanf("%d,%d",&a,&b);
while(a!=b)//a不等b
if(a>b)
{
a=a-b;
}
else
{
b=b-a;
}
printf("最大公约数:%d\n",a);
}
void qiongju() //穷举法求最大公约数
{
int m,n,a,b,y;
printf("输入两个数字:\n");
scanf("%d,%d",&a,&b);
m=a;
n=b;
for (y=a;y>0;y--)
if (a%y==0&&b%y==0)break;
printf("最大公约数是:%d\n",y);
}
void xiangchu()//相除法求最大公约数
{
int a,b,c,x,y;
printf("请输入两个数字:\n");
scanf("%d,%d",&a,&b);
x=a;
y=b;
while(b!=0) //一直除到余数等于0停止循环
{
c=a%b;
a=b;
b=c;
}
printf("最大公约数是:%d\n",a);
}
void menu()//界面菜单
{
int num;
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("* 4.退出系统 *\n");
printf("**********************\n");
printf("请选择菜单编号:");
scanf("%d",&num);
switch(num)
{
case 0:help();break;
case 1:xiangjian();break;
case 2:qiongju();break;
case 3:xiangchu();break;
case 4:q=0;break;
default:printf("请在0-4之间选择\n");
}
}
