Given N rational numbers in the form “numerator/denominator”, you are supposed to calculate their sum.
Input Specification:
Each input file contains one test case. Each case starts with a positive integer N (<=100), followed in the next line N rational numbers “a1/b1 a2/b2 …” where all the numerators and denominators are in the range of “long int”. If there is a negative number, then the sign must appear in front of the numerator.
Output Specification:
For each test case, output the sum in the simplest form “integer numerator/denominator” where “integer” is the integer part of the sum, “numerator” < “denominator”, and the numerator and the denominator have no common factor. You must output only the fractional part if the integer part is 0.
Sample Input 1:
5
2/5 4/15 1/30 -2/60 8/3
Sample Output 1:
3 1/3
Sample Input 2:
2
4/3 2/3
Sample Output 2:
2
Sample Input 3:
3
1/3 -1/6 1/8
Sample Output 3:
7/24
#include <iostream>
#include <math.h>
using namespace std;
void jia(long &a,long &b,long ax,long bx);
void out(long a,long b);
int main()
{
char s;
int n,i;
long ax,bx,a,b;
cin>>n;
cin>>a>>s>>b;
for(i=1;i<n;i++)
{
cin>>ax>>s>>bx;
jia(a,b,ax,bx);
}
out(a,b);
return 0;
}
void jia(long &a,long &b,long ax,long bx)
{
a=a*bx+ax*b;
b=bx*b;
int i=2;
while(i<=abs(a)&&i<=abs(b))
{
if(a%i==0&&b%i==0)
{
a=a/i;
b=b/i;
i=2;
continue;
}
i++;
}
}
void out(long a,long b)
{
if(a*b<0&&b<0)
{
a=-a;
b=-b;
}
if(b==1||a==0)
cout<<a<<endl;
else
{
int p=0;
while(abs(a)>abs(b))
{
if(a*b>0)
{
p++;
a=a-b;
}
else
{
p--;
a=a+b;
}
}
if(p!=0)
cout<<p<<" ";
if(a<0)
a=-a;
cout<<a<<"/"<<b<<endl;
}
}