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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Nightmare_ak/article/details/84501509

按照题意模拟即可

#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;
}

猜你喜欢

转载自blog.csdn.net/Nightmare_ak/article/details/84501509