算法:穷举法先将x,y两值比较大小并且互换,再进行与各种数的整除,如果这个数能同时被x,y整除,那么这个数就为最大公约数。
代码如下:
void exhaustion()
{
int x,y,t;
scanf("%d%d",&x,&y);
if(x<y)
{
t=x;
x=y;
y=t;
}
for(t=y;x%t||y%t;t--);
printf("%d\n",t);
}
算法:辗转相减法通过大量的减法赋值,通过x,y的差来寻找他们的最大公约数,经过多次的加减以后,x,y最终相等,得到最大公约数
代码如下:
void subtract()
{
int x,y;
scanf("%d%d",&x,&y);
while(x!=y)
{
while(x>y)
{
x=x-y;
}
while(x<y)
{
y=y-x;
}
printf("%d\n",x);
}
}
算法:辗转相除法就是将x
,y相除,他们的余数再进行相除。
代码如下:
Void divide()
{
int x,y,r;
scanf("%d%d",&x,&y);
r=x%y;
while(r)
{
x=y;
y=r;
r=x%y;
}
printf("%d\n",y);
}
总体代码如下:
//文件名:number.CPP
//作者:Linx-huo
//完成日期:2017.3.22
//主要功能:计算两个数的最大公约数
#include <stdio.h>
//穷举法
void exhaustion()
{
int x,y,t;
scanf("%d%d",&x,&y);
if(x<y)
{
t=x;
x=y;
y=t;
}
for(t=y;x%t||y%t;t--);
printf("%d\n",t);
}
//碾转相除法
void divide()
{
int x,y,r;
scanf("%d%d",&x,&y);
r=x%y;
while(r)
{
x=y;
y=r;
r=x%y;
}
printf("%d\n",y);
}
//相减法
void subtract()
{
int x,y;
scanf("%d%d",&x,&y);
while(x!=y)
{
while(x>y)
{
x=x-y;
}
while(x<y)
{
y=y-x;
}
printf("%d\n",x);
}
}
void main()
{
int choose = 0;
printf(" ------------------\n");
printf(" 1.穷举法\n");
printf(" 2.辗转相除法\n");
printf(" 3.相减法\n");
printf(" 4.退出本菜单\n");
printf(" ------------------\n");
while (1)
{
printf(" \n请输入使用方法编号:");
scanf("%d",&choose);
switch (choose)
{
case 1:
{
exhaustion();
break;
}
case 2:
{
divide();
break;
}
case 3:
{
subtract();
break;
}
case 4:
{
return;
}
default:
{
printf("请在1-4之间选择\n");
}
}
}
}