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
题意:完全与1088一样,比1088简单~
#include<iostream>
using namespace std;
long long int part, num, den;
int gcd(long long int temp_max, long long temp_min){
if(temp_max % temp_min == 0){
return temp_min;
}else
{
return gcd(temp_min, temp_max % temp_min);
}
}
void reform(long long int temp_num, long long int temp_den){
bool flag = true;
if((temp_num > 0 && temp_den < 0) || (temp_num < 0 && temp_den > 0)){
flag = false;
}
if(temp_num == 0){
num = 0;
den = 0;
}else
{
int max_factor = gcd(temp_num, temp_den);
temp_num = abs(temp_num / max_factor);
temp_den = abs(temp_den / max_factor);
if(flag){
part = part + temp_num / temp_den;
num = temp_num - (temp_num / temp_den) * temp_den;
den = temp_den;
}else
{
part = part - temp_num / temp_den;
num = (temp_num / temp_den) * temp_den - temp_num;
den = temp_den;
}
}
}
int main(){
int n;
cin >> n;
part = 0;
scanf("%lld/%lld", &num, &den);
for(int i = 1; i < n; i++){
long long int temp_num, temp_den;
scanf("%lld/%lld", &temp_num, &temp_den);
int mm = gcd(temp_num, temp_den);
temp_num = temp_num / mm;
temp_den = temp_den / mm;
num = num * temp_den + temp_num * den;
den = den * temp_den;
}
reform(num, den);
if(part == 0){
if(num == 0){
printf("0\n");
}else
{
printf("%lld/%lld\n", num, den);
}
}else
{
if(num == 0){
printf("%lld\n", part);
}else
{
printf("%lld %lld/%lld\n",part, num, den);
}
}
return 0;
}