PTA 乙级 1062 最简分数 (20分) C/C++

PTA 乙级 1062 最简分数 (20分) C/C++

 思路:输入两个分数的分子分母之后,为了之后方便进行比较,调整两分数的顺序为从小到大,分子从零开始进行累加到 k-1(i),判断通分后的分子(tmp)与分数1通分后的分子(cmp1),分数2通分后的分子(cmp2)进行比较,且保证将要输出的分子分母没有公约数(gcd)(更为方便理解的最大公约数的代码在1034 有理数的四则运算

 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 int gcd(int a, int b) {                    //求最大公约数
 6     return b == 0 ? a : gcd(b, a % b);
 7 }
 8 
 9 int main() {
10     long k = 0, n1 = 0, n2 = 0, m1 = 0, m2 = 0;
11     int flag = 0;
12     scanf("%d/%d %d/%d", &n1, &m1, &n2, &m2);
13     cin >> k;
14     if (n1 * m2 > n2 * m1) {            //保证第一个分数小于第二个分数
15         swap(n1, n2);
16         swap(m1, m2);
17     }
18     for (int i = 0; i < k; ++i) {        //分子从零开始累加
19         long tmp = i * m1 * m2;
20         long cmp1 = n1 * m2 * k;
21         long cmp2 = n2 * m1 * k;
22         if (tmp > cmp1 && tmp < cmp2 && gcd(i, k) == 1) {    //通分后与分数1和分数2进行比较,且分子与分母没有公约数
23             if (flag) cout << ' ';
24             cout << i << '/' << k;
25             flag = 1;
26         }
27     }
28     return 0;
29 }

PTA 乙级 1062 最简分数 (20分) C/C++