#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long LL;
struct Fraction{
LL up,down;
};
//最大公约数
//debug
//1.gcd写错了 2.整型输入 读成了长整形 3.函数没有return
LL gcd(LL a, LL b){
if(b == 0) return a;
else return gcd(b, a%b);
}
Fraction reduction(Fraction result){
if(result.down < 0){ //如果分母为负数,让分子为负数
result.up = - result.up;
result.down = - result.down;
}
if(result.up == 0){ //如果分子为0,让分母为1
result.down = 1;
}else{ //化简
LL d = gcd(abs(result.up), abs(result.down));
result.up /= d;
result.down /= d;
}
return result;
}
Fraction add(Fraction f1, Fraction f2){
Fraction result;
result.up = f1.up * f2.down + f1.down * f2.up;
result.down = f1.down * f2.down;
return reduction(result); //返回之前要化简!!!
}
void showResult(Fraction r){
r = reduction(r);
if(r.down == 1) printf("%lld\n",r.up);
else if(abs(r.up) > r.down){
printf("%lld %lld/%lld",r.up/r.down, abs(r.up) % r.down,r.down);
}else printf("%lld/%lld",r.up,r.down);
}
int main(){
int n;
scanf("%d",&n);
Fraction ans,tmp;
ans.up = 0;
ans.down = 1;
for(int i=0;i<n;i++){
scanf("%lld/%lld",&tmp.up, &tmp.down);
ans = add(ans,tmp);
}
showResult(ans);
return 0;
}
L1-009 N个数求和 (20 分)★
最新推荐文章于 2022-02-11 02:44:51 发布