c语言哪错了

P1888 三角函数

@[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


|