分数处理,简化,输出要会。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
#define MAX 100+10
struct Fraction
{
long long up;
long long down;
}fraction[MAX], sum;
int gcd(int a, int b)
{
if (b == 0)
return a;
else
return gcd(b, a%b);
}
void reduction(Fraction &f)
{
if (f.down < 0)
{
f.down *= -1;
f.up *= -1;
}
if (f.up == 0)
f.down = 1;
int d = gcd(abs(f.up), f.down);
f.up /= d;
f.down /= d;
return;
}
Fraction add(Fraction f1, Fraction f2)
{
Fraction r;
r.down = f1.down * f2.down;
r.up = f1.up*f2.down + f2.up*f1.down;
reduction(r);
return r;
}
int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int N = 0;
scanf("%d", &N);
for (int i = 0; i < N; i++)
{
scanf("%lld/%lld", &fraction[i].up, &fraction[i].down);
reduction(fraction[i]);
}
sum = fraction[0];
for (int i = 1; i < N; i++)
{
sum = add(sum, fraction[i]);
}
if (sum.down == 1)
printf("%lld", sum.up);
else if (abs(sum.up) > sum.down)
printf("%lld %lld/%lld", sum.up/sum.down, (abs(sum.up))%sum.down, sum.down);
else
printf("%lld/%lld", sum.up, sum.down);
return 0;
}