您的位置:首页 > 其它

1081. Rational Sum (20)

2018-02-06 15:00 351 查看


1081. Rational Sum (20)

时间限制

400 ms

内存限制

65536 kB

代码长度限制

16000 B

判题程序

Standard

作者

CHEN, Yue

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<stdio.h>
#include<math.h>
#include<algorithm>//abs() ...
typedef long long LL;
LL gcd(LL x,LL y){
return y==0?x:gcd(y,x%y);
}

int main(){
LL i,n,fz,fm,tempfz,tempfm,nowfm;
scanf("%lld",&n);
scanf("%lld/%lld",&fz,&fm);
LL temp=gcd(abs(fz),abs(fm));
fz=fz/temp;
fm=fm/temp;
for(i=0;i<n-1;i++){
scanf("%lld/%lld",&tempfz,&tempfm);
nowfm=fm*tempfm/gcd(fm,tempfm);
fz=nowfm/fm*fz+nowfm/tempfm*tempfz;
fm=nowfm;
temp=gcd(abs(fz),abs(fm));
fz=fz/temp;
fm=fm/temp;
}
LL integer=fz/fm;
if(integer){
printf("%lld",integer);
if(fz%fm){
printf(" %lld/%lld",fz%fm,fm);
}
}
else{
if(fz){
printf("%lld/%lld",fz,fm);
}
else{
printf("0");///...测试点4 整数和分数都为0
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: