@[Little_koiCheese](/user/1181083) 要求最大公约数。
by Jianbing_Juan @ 2023-11-14 00:19:11
min 和 max 要约分。
by Jianbing_Juan @ 2023-11-14 00:19:57
```cpp
int gcd(int a,int b)
{
return (!b)?a:gcd(b,a%b);
}
```
定义一个 `gcd` (求最大公约数),然后两数同时除以最大公约数即为约分。
by Jianbing_Juan @ 2023-11-14 00:31:03
@[Jianbing_Juan](/user/940854) 怎么还递归上了,明白你的意思了,谢谢啦,但是我看不懂递归
by Little_koiCheese @ 2023-11-14 17:41:43
```c
int main() {
int b = 0;
int a = 0;
int c = 0;
scanf("%d %d %d", &a, &b, &c);
int max = 0;
int min = 0;
int retmax = b > c ? b : c;
int retmin = b > c ? c : b;
if (a > retmax)
max = a;
else
max = retmax;
if (a < retmin)
min = a;
else
min = retmin;
int u = 0;
for (u = 1; u <= min; u++) {
if (retmin % u == 0) {
if (retmax % u == 0) {
max = retmax / u;
min = retmin / u;
}
}
}
printf("%d/%d", min , max);
return 0;
}
```
怎么又错了
by Little_koiCheese @ 2023-11-14 19:26:30
@[Little_koiCheese](/user/1181083) 你的求最大公约数的部分有问题罢。我再看看
by Jianbing_Juan @ 2023-11-14 22:06:07
是这样,你的求最大公约数的步骤出现问题了。
给你提供一个 for循环求最大公约数的思路。
```cpp
int gcd(int a,int b)
{
int minn=a>b?b:a;
int i;
for(i=minn-1;i>0;i--)
{
if((a%i==0) && (b%i==0))
{
break;
}
}
return i;
}
```
i从min-1开始向下遍历,当i第一次恰好整除min,max时,就说明是最大公约数。
by Jianbing_Juan @ 2023-11-14 22:16:53