1081. Rational Sum (20)

本文介绍了一个使用C++实现的分数加法算法。该算法通过定义一个名为Rational的结构体来表示分数,并实现了分数之间的加法运算。此外,还提供了一个简化分数的功能,确保分数处于最简形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:1081. Rational Sum (20)

#include <bits/stdc++.h>
using namespace std;
typedef long long llt;
struct Rational
{
    llt i,a,b;
    Rational(llt _i,llt _a,llt _b):i(_i),a(_a),b(_b){}
    Rational & operator +=(const Rational &val)
    {
        llt x=a*val.b+b*val.a,y=b*val.b;
        i+=val.i,a=x,b=y;
        simplify();
        return *this;
    }
    void simplify()
    {
        i+=a/b,a%=b;
        llt v=abs(__gcd(a,b));
        a/=v,b/=v;
        if(i<0&&a>0) i+=1,a-=b;
    }
};
int main()
{
    int n;
    Rational result(0,0,1);
    scanf("%d",&n);
    while(n--)
    {
        Rational val(0,0,1);
        scanf("%lld/%lld",&val.a,&val.b);
        val.simplify();
        result+=val;
    }
    if(result.i&&result.a)
        printf("%lld %lld/%lld\n",result.i,abs(result.a),result.b);
    else if(!result.i&&result.a)
        printf("%lld/%lld\n",result.a,result.b);
    else printf("%lld\n",result.i);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值