栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【PAT B-1034】有理数四则运算

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【PAT B-1034】有理数四则运算

【PAT B-1034】有理数四则运算 C++代码
#include 
using namespace std;
using gg = long long;
gg gcd(gg a, gg b) { return b == 0 ? a : gcd(b, a % b); }
using F = array;
F input() {
    F f;
    char c;  //吸收'/'符号
    cin >> f[0] >> c >> f[1];
    return f;
}
void simplify(array& f) {
    if (f[0] == 0) {
        f[1] = 1;
        return;
    }
    if (f[1] < 0) {
        f[1] = -f[1];
        f[0] = -f[0];
    }
    gg d = gcd(abs(f[0]), abs(f[1]));
    f[0] /= d;
    f[1] /= d;
}
F Plus(const F& f1, const F& f2) {
    F f;
    f[0] = f1[0] * f2[1] + f2[0] * f1[1];
    f[1] = f1[1] * f2[1];
    simplify(f);
    return f;
}
F Sub(const F& f1, const F& f2) {
    F f;
    f[0] = f1[0] * f2[1] - f2[0] * f1[1];
    f[1] = f1[1] * f2[1];
    simplify(f);
    return f;
}
F Multiply(const F& f1, const F& f2) {
    F f;
    f[0] = f1[0] * f2[0];
    f[1] = f1[1] * f2[1];
    simplify(f);
    return f;
}
F Div(const F& f1, const F& f2) {
    F f;
    f[0] = f1[0] * f2[1];
    f[1] = f1[1] * f2[0];
    simplify(f);
    return f;
}
void output(const F& f) {
    if (f[0] < 0)
        cout << '(';
    if (f[1] == 1) {
        cout << f[0];
    } else if (abs(f[0]) < f[1]) {
        cout << f[0] << "/" << f[1];
    } else
        cout << f[0] / f[1] << " " << abs(f[0]) % f[1] << "/" << f[1];
    if (f[0] < 0)
        cout << ')';
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    auto f1 = input(), f2 = input();
    simplify(f1);
    simplify(f2);
    unordered_map> um = {
        {'+', Plus}, {'-', Sub}, {'*', Multiply}, {'/', Div}};
    for (char c : {'+', '-', '*', '/'}) {
        output(f1);
        cout << ' ' << c << ' ';
        output(f2);
        cout << " = ";
        if (c == '/' and f2[0] == 0) {
            cout << "Infn";
        } else {
            auto f3 = um[c](f1, f2);
            output(f3);
            cout << 'n';
        }
    }
    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994424.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号