#include<iostream>
using namespace std;
//相减法
void function1()
{
int choose=1;
while(choose)
{
int m,n,gcm;
cout<<"请输入两组整数(空格隔开):"<<endl;
cin>>m>>n;
if(m==0||n==0)
{
cout<<"输入不符合规定"<<endl<<endl;
}
else
{
for(int i=0;n!=m;i++)
{
if(n<m)
{
n=n+m;
m=n-m;
n=n-m;
}
n=n-m;
}
gcm=n;
cout<<"相减法最大公约数为:"<<gcm<<endl<<endl;
}
cout<<"继续输入请按1,退出按0"<<endl;
cin>>choose;
cout<<endl;
}
}
//辗转相除法
void function3()
{
int choose=1;
while(choose)
{
int m,n,gcm;
cout<<"请输入两组整数(空格隔开):"<<endl;
cin>>m>>n;
if(m==0||n==0)
{
cout<<"输入不符合规定"<<endl<<endl;
}
else
{
while(n*m>0)
{
if(n>m)
{
n%=m;
}
else
{
m%=n;
}
}
gcm=n+m;
cout<<"辗转相除法最大公约数为:"<<gcm<<endl<<endl;
}
cout<<"继续输入请按1,退出按0"<<endl;
cin>>choose;
cout<<endl;
}
}
//穷举法
void function2()
{
int choose=1;
while(choose)
{
int i,gcm,m,n;
cout<<"请输入两组整数(空格隔开):"<<endl;
cin>>m>>n;
if(m==0||n==0)
{
cout<<"输入不符合规定"<<endl<<endl;
cout<<"继续输入请按1,退出按0"<<endl;
cin>>choose;
cout<<endl;
}
else
{
if(m>n)
{
for(i=1;i<=n;i++)
{
if(n%i==0&&m%i==0&&i>0)
{
gcm=i;
}
}
cout<<"穷举法最大公约数为:"<<gcm<<endl<<endl;
cout<<"继续输入请按1,退出按0"<<endl;
cin>>choose;
cout<<endl;
}
else
{
for(i=1;i<=m;i++)
{
if(n%i==0&&m%i==0&&i>0)
{
gcm=i;
}
}
cout<<"穷举法最大公约数为:"<<gcm<<endl<<endl;
cout<<"继续输入请按1,退出按0"<<endl;
cin>>choose;
cout<<endl;
}
}
}
}
//菜单
void menu()
{
cout<<"*************************"<<endl;
cout<<"******求最大公约数*******"<<endl;
cout<<"***** 1.相减法 *****"<<endl;
cout<<"***** 2.穷举法 *****"<<endl;
cout<<"***** 3.辗转相除法 *****"<<endl;
cout<<"*************************"<<endl;
int item;
cout<<"请选择:"<<endl;
cin>>item;
switch(item)
{
case 1:
function1();
break;
case 2:
function2();
break;
case 3:
function3();
break;
case 4:
default:
cout<<"请在1-4之间选择"<<endl<<endl;
}
}
int main()
{
while(1)
{
menu();
}
return 0;
}