zoukankan      html  css  js  c++  java
  • PAT 天梯赛 L1-009 N个数求和

    模拟题

    题目链接

    题解

    每次将两个分数进行相加,到最后再将结果化成带分数。主要考察的最大公约数与最小公倍数。

    代码如下:

    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn = 110;
    int n;
    struct Fraction {
        long long a,b;
    }f[maxn];
    
    long long _gcd(long long a, long long b) {
        if(b == 0) return a;
        else return _gcd(b, a%b);
    }
    long long _lcm(long long a, long long b) {
        long long c = _gcd(a,b);
        return a/c*b;
    }
    Fraction _add(Fraction A, Fraction B) {
        long long lcm = _lcm(A.b, B.b);
        A.a = (lcm/A.b)*A.a;
        B.a = (lcm/B.b)*B.a;
        A.a += B.a;
        A.b = lcm;
        long long gcd = _gcd(abs(A.a), A.b);
        A.a /= gcd;
        A.b /= gcd;
        return A;
    }
    void _output(Fraction ans) {
        long long gcd,x;
        gcd = _gcd(abs(ans.a), ans.b);
        ans.a /= gcd;
        ans.b /= gcd;
        x = ans.a / ans.b;
        ans.a %= ans.b;
        if(x == 0 && ans.a == 0)printf("0
    ");
        else if(x && ans.a == 0) {
            printf("%lld
    ", x);
        }else if(x == 0 && ans.a) {
            printf("%lld/%lld
    ", ans.a, ans.b);
        }else {
            printf("%lld %lld/%lld
    ", x, ans.a, ans.b);
        }
    }
    int main() {
        while(~scanf("%d", &n)) {
            Fraction ans;
            scanf("%lld/%lld", &ans.a, &ans.b);
            for(int i = 1; i < n; i++) {
                scanf("%lld/%lld", &f[i].a, &f[i].b);
                ans = _add(ans, f[i]);
            }
            _output(ans);
        }
        return 0;
    }
    

    Focus on Tech & Enjoy Life!

  • 相关阅读:
    深入了解css的行高Line Height属性
    【C++】函数指针
    【C++】常用知识点
    将数字转化为液晶显示屏的样子
    【多媒体】PCM
    【Android】网络下载图片&SD卡文件存储
    CPU 缓存(Cache)
    【C++】typename
    【多媒体】音频格式
    【Android】图片的异步加载
  • 原文地址:https://www.cnblogs.com/yinzm/p/5498516.html
Copyright © 2011-2022 走看看