社区讨论
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 条回复,欢迎继续交流。
正在加载回复...