1. 程式人生 > >PAT (Advanced Level) Practice 1081 Rational Sum (20 分)

PAT (Advanced Level) Practice 1081 Rational Sum (20 分)

按照題意模擬即可

#include<cstdio>
using namespace std;

typedef long long ll;

ll gcd(ll a,ll b)
{
    return b==0?a:gcd(b,a%b);
}

ll lca(ll a,ll b)
{
    return a/gcd(a,b)*b;
}

char s[100+5][30];

int main()
{
    int n;scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%s",s[i]);
    ll alldown=
1,up,down,sum=0; for(int i=0;i<n;i++) { sscanf(s[i],"%lld/%lld",&up,&down); alldown=lca(down,alldown); } for(int i=0;i<n;i++) { sscanf(s[i],"%lld/%lld",&up,&down); sum+=up*(alldown/down); } if(sum<0) printf("-"),sum=-sum; ll lef=
sum/alldown; if(lef) printf("%lld",lef); sum-=lef*alldown; if(sum) { ll d=gcd(sum,alldown); if(lef) printf(" "); printf("%lld/%lld\n",sum/d,alldown/d); } else { if(!lef) puts("0"); else puts(""); } return 0; }