求最大公约数(C语言)

求最大公约数(C语言),第1张

C语言求两个数最大公约数
步骤:
	1.使用scanf输入两个数
	2.求出两个数的所有公约数,并存储在数组中
	3.求出两个数组中所有相同的值,并存储在数组中
	4.计算出数组的最大值,就是两个数的最大公约数
#include 
#include 
#include 

int* getNum(int n);					//获取该数的约数数组
int* getSame(int arr[], int brr[]);	//获取两个数组相同部分
int getMax(int arr[]);				//获取数组最大值

//计算两个数的最大公约数
int test_0()
{
	//输入a、b两个数
	int a, b;
	scanf("%d %d", &a, &b);
	printf("%d %d\n", a, b);

	//获取a和b的约数数组
	int* arr = getNum(a);
	int* brr = getNum(b);

	//获取两个约数数组的共同部分,得到数组all
	int* all = getSame(arr, brr);

	//获取all数组的最大值,既是最大公约数,并打印
	int max = getMax(all);
	printf("%d", max); 

	//释放内存
	free(arr);
	free(brr);
	free(all);
	return 0;
}

//获取该数的约数数组,该数组使用0下标位置存储约数的个数
int* getNum(int n)
{
	int* arr = (int*)malloc(20 * sizeof(int));
	arr[0] = 0;

	for (int i = 1; i < sqrt(n); i++)
	{
		if (n % i == 0)
		{
			arr[arr[0] + 1] = i;
			arr[arr[0] + 2] = n / i;
			arr[0] += 2;
		}
	}
	return arr;
}

//获取数组最大值,0下标存储约束的个数
int getMax(int arr[])
{
	int max = arr[1];
	for (int i = 2; i <= arr[0]; i++)
	{
		if (max < arr[i])
		{
			max = arr[i];
		}
	}
	return max;
}

//获取两个数组相同部分,并返回数组
int* getSame(int arr[], int brr[])
{
	int* all = (int*)malloc(10 * sizeof(int));
	all[0] = 0;
	for (int i = 1; i <= arr[0]; i++)
	{
		for (int j = 1; j <= brr[0]; j++)
		{
			if (arr[i] == brr[j])
			{
				all[0] += 1;
				all[all[0]] = arr[i];
			}
		}
	}
	return all;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/673747.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存