本程序运用三种方法计算两个数的最大公约数:相减法、辗转相除法、穷举法。
/*文件名:求两个数最大公约数
作者Smile So luck
版本号2017.3.21.03
运行环境visual stdio6.0
程序功能:用三种方法计算出两个正整数的最大公约数*/
#include<stdio.h>
#include<stdlib.h>
int a,b,k=1;
void First();
void Second();
void Third();
void menu();
int main()
{
while(k)
{
menu();
}
system("pause");
return 0;
}
void First() /*穷举法*/
{
printf("请输入两个正整数:\n");
scanf("%d%d",&a,&b); /*从两个数a和b中的较小数开始逐个减小1,寻找能整除a和b的整数。第一个找到的整数即整数a和b的最大公约数。*/
int n=a;
if (n>b)
n=b;/*取两个数中的较小数*/
for(int i=n;i>=1;i--)
{
if (a%i==0&&b%i==0)
{
printf("最大公约数:%d \n",i);
break;
}
}
}
void Second() /*辗转相除法*/
{
int m, n;
int m_cup, n_cup, res; /*被除数, 除数, 余数*/
printf("请输入两个正整数:\n");
scanf("%d %d", &m, &n);
if (m > 0 && n >0)
{ /*m除以n得余数res,再把n赋值给m,res赋值给n,如此循环直到res=0,n为最大公约数*/
m_cup = m;
n_cup = n;
res = m_cup % n_cup;
while (res != 0)
{
m_cup = n_cup;
n_cup = res;
res = m_cup % n_cup;
}
printf("最大公约数是: %d\n", n_cup);
}
else printf("Error!\n");
}
void Third() /*相减法*/
{
int m, n;
printf("请输入两正个整数:");
scanf ("%d %d", &a, &b);
m=a;
n=b; /* a, b不相等,大数减小数,直到相等为止。*/
while (a!=b)
{
if (a>b)
a=a-b;
else
b=b-a;
}
printf("最大公约数是:%d\n",a);
}
void menu()/* 界面函数*/
{
int num;
printf(" \n\n \n\n");
printf("***************************************\n\n");
printf(" * 计算两个数的最大公约数 * \n\n ");
printf(" ********************************* \n\n");
printf(" ---------------------------------- \n");
printf(" * 1.使用穷举法计算 * \n");
printf(" * 2.使用辗转相除法计算 * \n");
printf(" * 3.使用相减法计算 * \n");
printf(" * 4.退出系统 * \n");
printf(" --------------------------------- * \n");
printf("请选择菜单编号:");
scanf("%d",&num);
switch(num) /*用数字0到4执行以上定义函数的功能*/
{
case 1:First();break;
case 2:Second();break;
case 3:Third();break;
case 4:k=0;break;
default:printf("请在0-4之间选择\n");
}
} 

该程序详细介绍了如何使用相减法、辗转相除法和穷举法来求解两个数的最大公约数。通过对这三种方法的阐述,帮助读者理解并掌握计算最大公约数的不同算法。

171

被折叠的 条评论
为什么被折叠?



