zoukankan      html  css  js  c++  java
  • 1081 Rational Sum (20 分)

    题意

    给出n个分数,求分数的和。分数前面可能有负号。若答案为假分数,则要按照带分数的形式输出;整数则按整数输出;否则按真分数输出。

    注意点

    1. 注意最后输出时,需要按整数、带分数、真分数的情况分类处理。
    2. 注意最终结果为0的处理。
    3. 必须在每一步加法后都进行约分,如果等全部加完后才约分,则会溢出。
    4. 计算最大公约数时,要注意是计算分子分母绝对值的公约数。
    const int N=110;
    struct Fraction
    {
        LL up,down;
    }a[N];
    int n;
    
    LL gcd(LL a,LL b)
    {
        return b?gcd(b,a%b):a;
    }
    
    Fraction add(Fraction a,Fraction b)
    {
        Fraction c;
        c.down=a.down*b.down;
        c.up=a.up*b.down+b.up*a.down;
        LL d=gcd(abs(c.up),c.down);
        c.up/=d,c.down/=d;
        return c;
    }
    
    int main()
    {
        cin>>n;
    
        for(int i=0;i<n;i++) scanf("%lld/%lld",&a[i].up,&a[i].down);
    
        for(int i=0;i<n-1;i++)
            a[i+1]=add(a[i],a[i+1]);
    
        LL res=a[n-1].up/a[n-1].down;
        if(res != 0)
        {
            a[n-1].up%=a[n-1].down;
            cout<<abs(res);
        }
        
        if(res && a[n-1].up) cout<<' ';
    
        if(a[n-1].up != 0)
            cout<<a[n-1].up<<'/'<<a[n-1].down;
        
        if(res == 0 && a[n-1].up == 0)
            cout<<0;
        cout<<endl;
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    sqlnet设置网络传输加密
    临时表处理办法
    分布式事务2PC_PENDING异常处理
    统计信息收集百分比和并行改变
    dataguard丢失归档日志处理
    patch 28729262
    Cardinality
    统计信息不准导致sql性能下降
    子查询展开
    ogg 单表拆分合并进程
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14426596.html
Copyright © 2011-2022 走看看