//*********三种方法求最大公约数***********
//主要功能:选择任意一种方法求最大公约数
//****************************************
/* 辗转相除法求最大公约数 */
///
//1.a%b得余数c
//2.若c=0,则b即为最大公约数
//3.若c!=0,则a=b,b=c,回去执行1
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
int select=1;
void main1()
{
int m, n, a, b, c;
int choose=1;
while(choose)
{
printf("请输入两个整数:\n");
scanf("%d%d", &a, &b); //输入两个整数
tt: if(a<=0||b<=0) //若数据为负,则输出错误,并重新输入
{ printf("\n输入错误,请重试\n");
scanf("%d%d", &a, &b);
goto tt; //利用goto语句进行循环判断
return ;
}
m=a;
n=b;
while(b!=0) //余数不为0,继续相除,直到余数为0
{
c=a%b;
a=b;
b=c;
}
printf("最大公约数为:%d\n", a);
printf("\n继续计算请选1,返回上一级请选0:");
scanf("%d",&choose);
if(choose==0)
return;
}
}
/* 相减法求最大公约数 */
/
//1.若a>b,则a=a-b
//2.若a<b,则b=b-a
//3.若a=b,则a即为最大公约数
//4.若a!=b,回去执行1
void main2 ( )
{
int m=0, n=0, a=0, b=0 ;
int choose=1;
while(choose)
{
printf("请输入两个整数:\n");
scanf ("%d %d", &a, &b); //输入两个整数
ff:if(a<=0||b<=0) //若数据为负,则输出错误,并重新输入
{ printf("\n输入错误,请重试\n");
scanf("%d%d", &a, &b);
goto ff; //利用goto语句进行循环判断
return ;
}
//输入a, b,其中的大数减小数,直到相等
else
if (a>b)
a=a-b;
else
if (a<b)
n=b,m=a,a=n-m;
else
a=b;
printf("最大公约数为:%d\n", a);
printf("\n继续计算请选1,返回上一级请选0:");
scanf("%d",&choose);
if(choose==0)
return;
}
}
/* 穷举法求最大公约数 */
//
//1.i=1
//2.若a,b能同时被i整除,则t=i
//3.i++
//4.若 i <= a(或b),回去执行2
//5.若 i > a(或b),t为最大公约数,结束
void main3 ()
{
int m, n, a, b, i, t;
int choose=1;
while(choose)
{
printf("请输入两个整数:\n");
scanf ("%d %d", &a, &b); //输入两个整数
hh:if(a<=0||b<=0) //若数据为负,则输出错误,并重新输入
{
printf("\n输入错误,请重试\n");
scanf("%d%d", &a, &b);
goto hh; //利用goto语句进行循环判断
return ;
}
m=a;
n=b;
for (i=1; i<=a; i++)
if ( a%i==0 && b%i==0 ) //若a,b能同时被i整除,则t=i
t=i;
printf("最大公约数为:%d\n", t);
printf("\n继续计算请选1,返回上一级请选0:");
scanf("%d",&choose);
if(choose==0)
return;
}
}
//主菜单
void menu()
{
int item;
printf("\n");
printf(" *********************************************************\n");
printf(" # #\n");
printf(" # 求最大公约数 ( ̄y▽ ̄)~ #\n");
printf(" # #\n");
printf(" *********************************************************\n");
printf(" # #\n");
printf(" # 1. 辗转相除法求最大公约数 #\n");
printf(" # #\n");
printf(" # 2. 相减法求最大公约数 #\n");
printf(" # #\n");
printf(" # 3. 穷举法求最大公约数 #\n");
printf(" # #\n");
printf(" # 4. 退出系统 #\n");
printf(" # #\n");
printf(" **********************************************************\n");
printf("\n");
printf(" 请选择您需要的操作序号(1-4)按回车确认:");
scanf("%d",&item);
printf("\n");
switch(item) //利用switch语句进行选择
{
case 1:
main1();break;
case 2:
main2();break;
case 3:
main3();break;
case 4:
select =0;break;
default:
printf("请在1-4之间选择\n");
}
}
int main()
{
while(select)
{
menu();
}
system("pause");
return 0;
}
求最大公约数(三种方法)
最新推荐文章于 2022-11-19 11:58:25 发布