#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef struct Fraction
{
ll up;
ll down;
}F;
int gcd(ll a,ll b)
{
if (abs(a)<abs(b))
swap(a,b);
if(b==0) return a;
else return gcd(b,a%b);
}
F getDnum(F a)
{
if(a.up==0) a.down = 1;
else{
ll temp = gcd(a.up,a.down);
a.up/=temp;
a.down/=temp;
if(a.down < 0)
{
a.up = -1 * a.up;
a.down = -1 * a.down;
}
}
return a;
}
F addF(F D1,F D2)
{
F D;
D.up = D1.up * D2.down + D1.down * D2.up;
D.down = D1.down * D2.down;
getDnum(D);
return D;
}
F printFrac(F a)
{
if(a.down == 1) printf("%lld",a.up);
else if(abs(a.up)>a.down)
printf("%lld %lld/%lld",a.up/a.down,abs(a.up)%a.down,a.down);
else
{
printf("%lld/%lld",a.up,a.down);
}
}
const int N = 110;
int main()
{
int n;
F ans;
ans.up = 0;
ans.down = 1;
F D[N];
scanf("%d",&n);
for(int i = 1;i<=n;i++)
{
scanf("%lld/%lld",&D[i].up,&D[i].down);
D[i]=getDnum(D[i]);
// printf("%d ",D[i].up);
}
for(int i = 1;i<=n;i++)
{
ans = addF(ans,D[i]);
ans = getDnum(ans);
}
printFrac(ans);
}
5.3 1081 Rational Sum (20 分)
最新推荐文章于 2020-03-24 16:20:22 发布