题解 | #【模板】分数四则运算#
【模板】分数四则运算
https://www.nowcoder.com/practice/7576229a7b954df384616fdc9e64eefc
大概三个点需要注意
- 使用int64
- 用gcd化简
- 输入时也要判断inf (考虑
)
- 数据量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")

查看2道真题和解析