Hướng dẫn giải của F02: Tổng hai phân số
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng dẫn giải
Cho hai phân số a/b và c/d, cần tìm phân số tối giản của tổng a/b + c/d.
Cách làm
Quy đồng: a/b + c/d = (ad + cb) / (b*d). Tử số và mẫu số có thể lên tới khoảng 10^12, nên phải dùng kiểu long long. Sau đó tìm ước chung lớn nhất của tử và mẫu rồi chia cả hai cho ước đó.
#include <bits/stdc++.h>
using namespace std;
// Tìm ước chung lớn nhất bằng thuật toán Euclid
long long gcd_so(long long x, long long y) {
while (y != 0) {
long long r = x % y;
x = y;
y = r;
}
return x;
}
int main() {
long long a, b, c, d;
cin >> a >> b;
cin >> c >> d;
// a/b + c/d = (a*d + c*b) / (b*d)
// Dùng long long vì tích có thể lên tới 10^12
long long tu = a * d + c * b;
long long mau = b * d;
long long g = gcd_so(tu, mau);
cout << tu / g << "/" << mau / g << "\n";
return 0;
}
Bình luận