1081 Rational Sum

#include<iostream>
using namespace std;

long long a[100],b[100],signal[100];

long long ZDGYS(long long x,long long y){//最大公约数
    long long  big,small;
    if(x>y){
        big=x,small=y;
    }
    else{
        big=y,small=x;
    }
    while(small!=0){
        long long  temp=big%small;
        big=small;
        small=temp;
    }
    return big;
}
//  20  12
//  12  8
//  8   4
//  4   0


long long  ZXGBS(long long x,long long y){//最小公倍数
    long long  temp =ZDGYS(x,y);
    return x*(y/temp);
}
//  20  12

int main()
{
    long long i,N;
    cin>>N;
    for(i=0;i<N;i++){
        char c;
        cin>>a[i]>>c>>b[i];
        if(a[i]<0){
            a[i]*=-1;
                signal[i]=-1;
        }
        else signal[i]=1;
    }
    long long  A,B;
    B=b[0];
    for(i=1;i<N;i++){
        B=ZXGBS(B,b[i]);
    }//分母通分
    A=0;
    for(i=0;i<N;i++){
        //B/b[i]    分母扩大倍数
        A+=signal[i]*a[i]*(B/b[i]);
    }//分子累加
    
    long long  temp=ZDGYS(A,B);
    A/=temp;
    B/=temp;//化简
    
    if(A==0){
        cout<<0;
        return 0;
    }
    
    if(A<0){
        cout<<'-';
        A*=-1;
    }//符号
    
    if(A>+B){
        cout<<A/B;
    }//整数部分
    
    if(A>+B&&A%B){
        cout<<' ';
    }//空格
    
    if(A%B){
        cout<<A%B<<'/'<<B;
    }
}
//  1/12    1/20    1/30
//  5/60    3/60    2/60    通分
//  10/60
//  1/6

//最小公倍数
//最大公约数
//20    12
//12    8
//8     4
//4     0
//  20  12  8   4   0
//  20=4*5
//  12=$*3
//20*12/4=240/4=60=4*5*3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上官唐云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值