C4-16 · Rút gọn phân số
Xem dạng PDF
Gửi bài giải
Điểm:
1,00
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Input:
stdin
Output:
stdout
Tác giả:
Nguồn bài:
Dạng bài
Ngôn ngữ cho phép
Python
Đề
Có T bộ test, mỗi bộ là một phân số tu/mau (tử và mẫu là số nguyên, mẫu khác 0, cả hai có thể âm). Với mỗi bộ, in phân số tối giản bằng nó theo quy tắc:
- mẫu luôn dương; nếu phân số âm thì dấu
-đặt ở tử; - nếu mẫu (sau khi rút gọn) bằng 1 thì chỉ in tử;
- ngược lại in dạng
tu/mau(không có dấu cách).
Gợi ý: chia cả tử và mẫu cho ƯCLN của abs(tu) và abs(mau) (thuật toán Euclid, mục 4.6.2), rồi xử lý dấu.
Dữ liệu vào
- Dòng đầu: số nguyên T.
- T dòng tiếp theo, mỗi dòng hai số nguyên
tu maucách nhau một dấu cách.
Kết quả
T dòng, dòng thứ i là phân số tối giản của bộ thứ i.
Ràng buộc
- 1 ≤ T ≤ 1000.
- −10⁹ ≤ tu, mau ≤ 10⁹; mau ≠ 0.
Ví dụ
Dữ liệu vào:
2
84 -36
-10 -5
Kết quả:
-7/3
2
Giải thích ví dụ
- Bộ 1: ƯCLN(84, 36) = 12, nên 84/−36 = 7/−3. Mẫu âm → đổi dấu cả tử và mẫu: −7/3.
- Bộ 2: ƯCLN(10, 5) = 5, nên −10/−5 = −2/−1 → đổi dấu: 2/1. Mẫu bằng 1 → chỉ in
2.
Với tử bằng 0 (ví dụ 0 -7): ƯCLN(0, 7) = 7, phân số là 0/1 → in 0.
Ghi chú
- Có test với tử, mẫu cỡ 10⁹ nguyên tố cùng nhau: tìm ƯCLN bằng cách thử từng ước sẽ quá thời gian; hãy dùng Euclid.
- Dùng
//khi chia cho ƯCLN; dùng/sẽ ra số thực (-7.0/3.0).
Nguồn trong sách: Bài C4-16, mục 4.10, giáo trình Lập trình cơ sở với Python — TS. Nguyễn Quốc Long · Mức: (****)
Đang tải...