zoukankan      html  css  js  c++  java
  • PAT 1081. Rational Sum

    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<iostream>
    #include<math.h>
    using namespace std;
    long long int n,s1,s2,m1,m2;
    long long int gcd(long long int a,long long int b){
    	if(a==0) return 1;
        return a%b==0?b:gcd(b,a%b);
    }
    void add(){
    	s1=s1*m2+s2*m1;
    	m1=m1*m2;
    	long long int s=gcd(abs(s1),m1);
    	m1/=s; s1/=s;
    }
    int main(){	
        cin>>n;
    	scanf("%lld/%lld",&s1,&m1);
    	for(int i=1;i<n;i++){
    		scanf("%lld/%lld",&s2,&m2);
    		add();
    	}
    	if(s1<0) cout<<"-";
    	long long int t=abs(s1)/m1;
    	s1=abs(s1)%m1; 
    	if(s1==0) printf("%lld",t);// 整数 
    	else if(t!=0)
    	    printf("%lld %lld/%lld",t,s1,m1); //假分数 
    	else
    	    printf("%lld/%lld",s1,m1); //分数 
            return 0;
    } 
    
  • 相关阅读:
    随笔
    std::condition_variable(复习)
    随笔
    std::vector<std::vector<> >
    staitc_cast,const_cast....
    复制构造函数
    c++ 临时对象
    复制初始化和直接初始化
    随笔
    Fedora 安装oracle11g 之最简洁方式
  • 原文地址:https://www.cnblogs.com/A-Little-Nut/p/8408947.html
Copyright © 2011-2022 走看看