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.

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

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.