首页 > 代码库 > PAT 1081. Rational Sum

PAT 1081. Rational Sum

#include <cstdio>#include <cstdlib>using namespace std;long long gcd(long long a, long long b) {    long long r;    while (r = (a % b)) {        a = b;        b = r;    }    return b;}int main() {    int N;    scanf("%d", &N);    long long sa = 0, sb = 1, a, b;        for (int i=0; i<N; i++) {        scanf("%lld/%lld", &a, &b);        long long newb = b * sb / gcd(b, sb);        long long sf =  newb / sb;        long long cf =  newb / b;        sa = sa * sf + a * cf;        sb = newb;        long long c = gcd(sa < 0 ? -sa : sa, sb);        sa = sa/c;        sb = sb/c;    }        if (sa < 0) {        printf("-");        sa = -sa;    }    long long r = sa % sb;    long long q = sa / sb;    if (r == 0) {        printf("%lld\n", q);    } else {        if (q != 0) {            printf("%lld ", q);        }        printf("%lld/%lld\n", r, sb);    }        return 0;}

还好数值范围没有超

PAT 1081. Rational Sum