50pts求助
查看原帖
50pts求助
1041765
AKkkk_TIX楼主2024/12/20 20:56
#include <bits/stdc++.h>
using namespace std;
struct fenshu{
    long long fenzi;
    long long fenmu;
    char sign;
    
    fenshu(){
        fenzi = fenmu = 1;
        sign = '+';
    }
    
    void output(){
        if(sign == '-')
            printf("-");
        if(fenmu != 1)
            printf("%d/%d", fenzi, fenmu);
        else
            printf("%d", fenzi);
    }
    
    void tiaozheng(){
        sign = '-';
        fenzi = abs(fenzi);
    }

    void huajian(){
        long long gcd = __gcd(fenzi, fenmu);
        fenzi /= gcd;
        fenmu /= gcd;
    }
    
    void jisuan(fenshu x, fenshu y){
        long long lcm = x.fenmu * y.fenmu / __gcd(x.fenmu, y.fenmu);
        long long f = lcm / x.fenmu, s = lcm / y.fenmu;
        x.fenmu *= f;
		x.fenzi *= f;
        y.fenmu *= s;
		y.fenzi *= s;
        if(x.sign == y.sign){
            sign = x.sign;
            fenmu = x.fenmu;
            fenzi = x.fenzi + y.fenzi;
        }
        else{
            fenmu = x.fenmu;
            fenzi = abs(x.fenzi - y.fenzi);
            if(fenzi < 0)
                tiaozheng();
        }
        huajian();
    }
};
int main(){
    fenshu a,b;
    char op;
    scanf("%d/%d", &a.fenzi, &a.fenmu);
    if(a.fenzi < 0)
        a.tiaozheng();
    cin >> op;
    
    while (scanf("%d/%d", &b.fenzi, &b.fenmu)!=EOF){
        if(op == '-')
            b.tiaozheng();
		else b.sign = '+';
        if (op == EOF) break;
        a.jisuan(a, b);
        
        cin >> op;
    }
    
    a.output();
    return 0;
}

记录详情

2024/12/20 20:56
加载中...