1.题目描述

Given N rational numbers in the form “numerator/denominator”, you are supposed to calculate their sum.
给定N个有理数的形式“分子/分母”,你应该计算他们的和。

2.输入描述:

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.
每个输入文件包含一个测试用例。每种情况都以正整数N(<=100)开头,在下一行N有理数“A1/b1a2/b2.”所有分子和分母都在“long int”的范围内。如果有负数,则符号必须出现在分子前面。

3.输出描述:

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.
对于每个测试用例,输出最简单形式的和“整数分子/分母”,其中“整数”是和的整数部分,“分子”<“分母”,分子和分母没有公共因子。如果整数部分为0,则只能输出小数部分。

4.输入例子:

5
2/5 4/15 1/30 -2/60 8/3

5.输出例子:

3 1/3

6.源代码:

#include<stdio.h>
int gcd(int x,int y)//求最大公约数
{
	return x?gcd(y%x,x):y;
}
int main()
{
	int A,B,N;
	scanf("%d",&N);
	int sum_A=0,sum_B=1;//初始化分数之和的分子和分母(分母不能为零)
	for(int i=0;i<N;i++)
	{
		scanf("%d/%d",&A,&B);
		sum_A=sum_A*B+sum_B*A;//分子之和
		sum_B=sum_B*B;//分母之和
	}
	int sum=sum_A/sum_B;//求整
	sum_A%=sum_B;//约分
	int T=gcd(sum_A,sum_B);
	if(T<0)		//使最大公约数为正数
		T=-T;
	if(sum_A&&sum)
		printf("%d %d/%d",sum,sum_A/T,sum_B/T);
	else
		if(!sum_A)
			printf("%d",sum);
		else
			printf("%d/%d",sum_A/T,sum_B/T);
	return 0;
}