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!

  • 相关阅读:
    ABAP实现屏幕自己刷新和跳转功能
    SAP 邮件发送
    MIRO做发票校验时实现替代功能的多种方式
    SAP资产折旧,消息编号AA687:在上一年结算之后您只能记帐到新的一年
    SAP 月结F.19与GR/IR
    ABAP字符串的加密与解密
    ABAP DEBUG
    NUMBER_GET_NEXT
    OO ALV 学习参考
    Crontab定时任务配置
  • 原文地址:https://www.cnblogs.com/yinzm/p/5498516.html
Copyright © 2011-2022 走看看