2017年院赛B题 N个数求和

来源:互联网 发布:呼市吉林大学网络教育 编辑:程序博客网 时间:2024/05/16 08:58

目录:

2017年院赛A题 Neptune'Pudding

2017年院赛B题 N个数求和

2017年院赛C题 treat

2017年院赛D题 简单加密

2017年院赛E题 守望者的逃离

2017年院赛F题 数独游戏

2017年院赛G题 忠诚

2017年院赛H题 最大异或和


题目:

Description

本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式。

Input

输入第一行给出一个正整数T,代表数据组数。每组数据第一行给出一个整数N(<=100)。随后一行按格式“a1/b1 a2/b2 ...”给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

Output

输出上述数字和的最简形式 —— 即将结果写成“整数部分 分数部分”,其中分数部分写成“分子/分母”,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

Sample Input

1

5

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

Sample Output

3 11/30


因为懒得解释比赛过程中的曲折,所以我略改了题目,而且也不给出标程,总之题目如上,AC的代码如下。

我的代码:

#include<iostream>using namespace std;long long a,b,ansa=0,ansb=1;long long gcd(long long a,long long b){if(b==0)return a;return gcd(b,a%b);}void add(long long a,long long b){long long g=gcd(ansb,b);long long ta=b/g*ansa+ansb/g*a,tb=ansb/g*b;ansa=ta/gcd(ta,tb),ansb=tb/gcd(ta,tb);}int main(){int t,n;char c;cin>>t;while(t--){ansa=0,ansb=1;cin>>n;while(n--){cin>>a>>c>>b;add(a/gcd(a,b),b/gcd(a,b));}if(ansa%ansb==0)cout<<ansa/ansb;else{if(ansa>=ansb)cout<<ansa/ansb<<" ";cout<<ansa%ansb<<'/'<<ansb;}cout<<endl;}return 0;}

0 0
原创粉丝点击