您的位置:首页 > 编程语言 > C语言/C++

[c++]求两个正整数的最大公约数

2017-03-22 09:05 225 查看
使用了三种算法(辗转相除法、辗转相减法、穷举法)

程序的算法部分使用了递归,这样程序会看起来更简练一些。

在使用递归的时候也遇到了一些问题,不过好在已经都解决了。

代码如下:

//创建时间:2017年3月18日
//主要功能:用辗转相除法、辗转相减法、穷举法求两个整数的最大公约数

#include "stdafx.h"
#include "iostream"
using namespace std;

int a, b;//存输入的两个整数
//辗转相除法
int GCD1(int x, int y)
{
if (x%y == 0)
cout << "最大公约数为:" << y << endl;
else
return GCD1(y, x%y);//递归
}

//辗转相减法
int GCD2(int x, int y)
{
if (x >= y)
{
if (x - y == 0)
cout << "最大公约数是:" << y;
else
return GCD2(y, x - y);//递归
}
if (x < y)
return GCD2(y, x);//递归
}

//穷举法
void GCD3()
{
int i;
if (a >= b)
i = b;
else
i = a;

for (; i > 0; i--)
{
if (a%i == 0 && b%i == 0)
{
cout << "最大公约数为:" << i;
break;
}
}
}

//输入并检测数据的正确性
void input()
{
cout << "请输入两个正整数:" << endl;
cin >> a >> b;
if (a <= 0 || b <= 0)
{
cout << "数据有误,请输入正整数" << endl;
input();
}
}

//菜单
void menu()
{
int choose;
cout << "              *********************************************************" << endl;
cout << "              #                                                       #" << endl;
cout << "              #                     求最大公约数                      #" << endl;
cout << "              #                                                       #" << endl;
cout << "              *********************************************************" << endl;
cout << "              #                                                       #" << endl;
cout << "              #       1.辗转相除法    2.辗转相减法    3.穷举法        #" << endl;
cout << "              #                                                       #" << endl;
cout << "              #                        4.退出程序                     #" << endl;
cout << "              *********************************************************" << endl;
while (1)//可以进行重复计算
{
cout << endl << "请输入操作编号:" << endl;
cin >> choose;
switch (choose)
{
case 1:
input();
if (a > b)
GCD1(a, b);
else
GCD1(b, a);
break;
case 2:
input();
GCD2(a,b);
break;
case 3:
input();
GCD3();
break;
case 4:
return;
default:
cout << "请在1~4之间选择" << endl;
}
}
}

int main()
{
menu();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  递归 c++