题解 | #【模板】分数四则运算#

【模板】分数四则运算

https://www.nowcoder.com/practice/7576229a7b954df384616fdc9e64eefc

大概三个点需要注意

  1. 使用int64
  2. 用gcd化简
  3. 输入时也要判断inf (考虑
  4. 数据量5e5,IO上可能有瓶颈(如果限时1s的话),因此建议关闭流同步,将endl改为\n

AC代码

#include <cassert>
#include <cstdint>
#include <ios>
#include <iostream>
#include <numeric>
using namespace std;

template <class T>
void reduce(T& num, T& den) {
    T g = gcd(num, den);
    num /= g;
    den /= g;
    if (den < 0) {
        num *= -1;
        den *= -1;
    }
}


void solve() {
    int64_t a, b, o, c, d;
    cin >> a >> b >> o >> c >> d;
    if (b == 0 || d == 0) {
        cout << "inf" << '\n';
        return;
    }
    int64_t num, den;
    switch (o) {
        case 1:
            num = a * d + b * c;
            den = b * d;
            break;
        case 2:
            num = a * d - b * c;
            den = b * d;
            break;
        case 3:
            num = a * c;
            den = b * d;
            break;
        case 4:
            num = a * d;
            den = b * c;
            break;
        default:
            assert(0);
    }
    if (den == 0) {
        cout << "inf" << '\n';
    } else {
        reduce(num, den);
        cout << num << ' '  << den << '\n';
    }
}

int main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);
    int t;
    cin >> t;
    while (t--) solve();
}
// 64 位输出请用 printf("%lld")
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务