欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PAT(A)1081 Rational Sum (20分)(模拟)

程序员文章站 2022-07-08 22:19:36
...

PAT(A)1081 Rational Sum (20分)(模拟)

Sample Input

5
2/5 4/15 1/30 -2/60 8/3

Sample Output

3 1/3

思路:
思路不难,情况比较多,注意输出的格式。
1、整数部分、分数部分都不为0,正常输出。
2、整数部分为0,只输出分数。
3、分数部分为0,只输出整数。
4、整数部分、分数部分都为0,输出0。
我忘了最后一个情况,卡了最后一个点。。。
代码

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>

using namespace std;

#define endl '\n'

typedef long long ll;

int main()
{
     int n;
     cin >> n;

     ll x, y;
     ll sumx = 0, sumy = 0;

     scanf("%lld/%lld", &sumx, &sumy);
     for (int i = 1; i < n; ++i)
     {
        scanf("%lld/%lld", &x, &y);
        int f = 1;
        if (x < 0)
        {
            f = -1;
            x = -x;
        }
        if (x == 0) continue;

        ll g;

        ll sx = sumx * y + f * x * sumy;
        sumx = sx;
        sumy *= y;

        g = __gcd(sumx, sumy);
        sumx /= g;
        sumy /= g;
    }

    ll m = sumx / sumy;
    sumx %= sumy;
    
    int f = 0;

    if (m != 0)
    {
        printf("%lld", m);
    }
    
    if (m != 0 && sumx != 0)
        printf(" ");

    if (sumx != 0)
        printf("%lld/%lld", sumx, sumy);
    
    if (m == 0 && sumx == 0)
    {
        printf("0");
    }

    return 0;
}