C语言求两个数最大公约数
步骤:
1.使用scanf输入两个数
2.求出两个数的所有公约数,并存储在数组中
3.求出两个数组中所有相同的值,并存储在数组中
4.计算出数组的最大值,就是两个数的最大公约数
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int* getNum(int n);
int* getSame(int arr[], int brr[]);
int getMax(int arr[]);
int test_0()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d %d\n", a, b);
int* arr = getNum(a);
int* brr = getNum(b);
int* all = getSame(arr, brr);
int max = getMax(all);
printf("%d", max);
free(arr);
free(brr);
free(all);
return 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;
}
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;
}