美文网首页
L1-009 N个数求和

L1-009 N个数求和

作者: 洛洛敲代码 | 来源:发表于2019-01-26 16:45 被阅读0次

    题目描述

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

    输入格式

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

    输出格式

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

    输入样例1

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

    输出样例1

    3 1/3
    

    输入样例2

    2
    4/3 2/3
    

    输出样例2

    2
    

    输入样例3

    3
    1/3 -1/6 1/8
    

    输出样例3

    7/24
    

    题解思路

    整个题目需要注意的地方:
    1.当整数和分数都为0时,打印0。
    2.在计算的同时要注意通分。

    题解代码

    #include <bits/stdc++.h>
    using namespace std;
    
    typedef long long LL;
    
    //欧几里德算法 求最大公约数
    LL gcd(LL a, LL b){
        if(a % b == 0){
            return b;
        } else {
            return gcd(b, a % b);
        }
    }
    
    /*
        将 a / b 与 c / d 求和
        整数部分作为返回值返回
        剩下的结果储存到c / d中 
    */ 
    LL add(LL a, LL b, LL& c, LL& d){
        //1.通分
        a *= d, c *= b, b *= d, d = b;
        //2.算整数部分
        c += a;
        //3.化简
        LL g = gcd(c, d);
        c /= g;
        d /= g;
        LL res = c / d;
        c %= d;
        return res;
    }
    
    int main(){
        LL a = 0, b = 0, c = 0, d = 0, sum = 0;
        int T = 0;
        scanf("%d", &T);
        while(T--){
            scanf("%lld/%lld", &a, &b);
            if(c == 0){
                c = a;
                d = b;
            } else {
                sum += add(a, b, c, d);
            }   
        }
        //如果整数部分不为0
        if(sum != 0){
            printf("%lld", sum);
            if(c != 0){ //如果分数部分不为0
                printf(" %lld/%lld", c, d);
            }
        } else {
            //如果分数部分为0
            if(c == 0){
                printf("0");
            } else {
                printf("%lld/%lld", c, d);
            }
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:L1-009 N个数求和

          本文链接:https://www.haomeiwen.com/subject/hkbijqtx.html