前言
这是一道非常有意思的题目。
分析
将用两种不同的方式来解。第一种,判断的方式。第二种,递归。
解决
第一种,判断的方式:
#include <stdio.h>
int gcd(int a, int b);
int main(void)
{
int one_number;
int two_number;
printf("%s", "Enter a integer: ");
scanf("%d", &one_number);
printf("%s", "Enter another integer: ");
scanf("%d", &two_number);
printf("gcd: %d", gcd(one_number, two_number));
}
int gcd(int a, int b)
{
int x;
int y;
if (a <= b)
{
x = a;
}
else
{
x = b;
}
for (int i = 1; i <= x; i++)
{
if (a % i == 0 && b % i == 0)
{
y = i;
}
}
return y;
}
第二种,递归。
#include <stdio.h>
int gcd(int a, int b);
int main(void)
{
int one_number;
int two_number;
printf("%s\n", "Enter a integer: ");
scanf("%d", &one_number);
printf("%s\n", "Enter another integer: ");
scanf("%d", &two_number);
printf("gcd: %d", gcd(one_number, two_number));
}
int gcd(int a, int b)
{
if (b == 0)
{
return a;
}
else
{
return gcd(b, a % b);
}
}
第二种递归的方式,使用到了欧几里得算法又叫循环相除法。