PAT(甲级)1081
来源:互联网 发布:阿里小号怎么登录淘宝 编辑:程序博客网 时间:2024/06/05 17:22
1081. Rational Sum (20)
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:52/5 4/15 1/30 -2/60 8/3Sample Output 1:
3 1/3Sample Input 2:
24/3 2/3Sample Output 2:
2Sample Input 3:
31/3 -1/6 1/8Sample Output 3:
7/24
#include <cstdio>#include <iostream>using namespace std;////////////////////////////////////////////////////////////////////1.remember that the input asures the demoninator is a possitive integer,so//no need to deal with the case//2.the simplest form of -10/3 is -3 -1/3 not -3 1/3//3.when calculate mygcd,make sure numerator is nonzero////////////////////////////////////////////////////////////////////////long long mygcd(long long a,long long b){if(a < 0) a = -a;//if(b < 0)// b =-b;if(a > b){int tmp=a;a=b;b=tmp;}while(b%a !=0){int tmp=b%a;b =a;a = tmp;}return a;}void add(long long &numerator1,long long &denominator1,long long &numerator2,long long &denominator2){int factor;if(numerator2 !=0){factor = mygcd(numerator2,denominator2);numerator2 /=factor;denominator2 /=factor;}numerator1 = numerator1*denominator2+numerator2*denominator1;denominator1 = denominator1*denominator2;if(numerator1 == 0){ //if numerator1 is zero, return denominator1 = 1;return ;}factor = mygcd(numerator1,denominator1);numerator1 = numerator1/factor;denominator1 = denominator1/factor;}int main(){int times;long long numerator1,denominator1,numerator,denominator;scanf("%d",×);scanf("%lld/%lld",&numerator1,&denominator1);for(int i=0;i<times-1;i++){scanf("%lld/%lld",&numerator,&denominator);add(numerator1,denominator1,numerator,denominator);}if(denominator1 == 1) //integer part no fraction part including zero cout <<numerator1 <<endl;else{if(numerator1 > denominator1 || (-numerator1) > denominator1) //integer part plus fraction partcout <<numerator1/denominator1 <<' ' <<numerator1%denominator1 <<'/' <<denominator1 <<endl;else //only fraction partcout <<numerator1 <<'/' <<denominator1 <<endl;}return 0;}
- PAT(甲级)1081
- *浙大PAT甲级 1081
- PAT甲级1081
- PAT 甲级
- PAT甲级 A1025.PAT RANKING
- PAT 甲级 1025 PAT Ranking
- PAT(甲级)1003
- PAT(甲级)1004
- PAT(甲级)1005
- PAT(甲级)1006
- PAT(甲级)1007
- PAT(甲级)1008
- PAT(甲级)1009
- PAT(甲级)1010
- PAT(甲级)1011
- PAT(甲级)1012
- PAT(甲级)1013
- PAT(甲级)1014
- ViewPager显示不完整的解决办法
- 什么是I帧,P帧,B帧
- android自定义日期选择
- python笔记
- nosql数据库与内存数据库
- PAT(甲级)1081
- [iOS开发项目-5] 图片浏览器
- checked exception和unchecked exception区别
- Java注解的使用@interface:
- Python解释器的探讨:第二部分代码对象
- python re.search 和 re.match 正则表达式
- 使用SQL大全(技巧讲解)
- 使用Soap头自定义身份验证
- Android学习之HelloWorld