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

华为编程大赛第四轮第一题:求多个正整数的最大公约数!C++

2014-05-05 21:06 295 查看
计算多个正整数的最大公约数

描述:计算多个(最多100个,最少一个)正整数(正整数的范围是:1~20000)的最大公约数。公约数是指:能被所有的整数整除的整数。

运行时间限制:无限制

内存限制:无限制

输入:

第一个数字是整数的数量,后面是每个整数的具体值;

备注:读取的时候,不需要读入换行符'\n'

输出:

最大公约数

备注:输出的时候,不需要输出换行符'\n'

样例输入:

4

5 10 15 20

样例输出:

5

本人抛砖引玉,求更简练的代码~~??另外此代码省去了判别参数传入错误的情况,以使各位看官清晰了解代码!

#include <iostream>
using namespace std;
int gcd(int a, int b);
int gcdd(int* p, int len);
int main()
{
	int num = 1;
	int i;//  由于不同编译器对for初始条件处定义的局部性不一致,故 放在这里!
	cin>>num;
	int *p = new int[num];
	for (i = 0; i < num; i++)
	{
		cin>>*(p+i);
	}

	cout<<gcdd(p, num);

	delete [] p;
	return 0;
}

int gcdd(int* p, int len)
{
	int* pp = new int[len];
	int res =0;
	memcpy(pp, p, len * sizeof(int));
	for (int i = 1; i < len; i++)
	{
		*pp = gcd(*pp, *(pp+i));
	}
	res = *pp;
	delete [] pp;
	return res;
}

int gcd(int a, int b)
{
	if (0 == a % b)
	{
		return b;
	}

	return gcd(b, a % b);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: