PAT(甲级)1081

来源:互联网 发布:阿里小号怎么登录淘宝 编辑:程序博客网 时间:2024/06/05 17:22

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:
52/5 4/15 1/30 -2/60 8/3
Sample Output 1:
3 1/3
Sample Input 2:
24/3 2/3
Sample Output 2:
2
Sample Input 3:
31/3 -1/6 1/8
Sample 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;}

0 0
原创粉丝点击