社区讨论

50pts求助

P1572计算分数参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m4wr9r7p
此快照首次捕获于
2024/12/20 20:57
去年
此快照最后确认于
2025/11/04 12:35
4 个月前
查看原帖
CPP
#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;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...