Đề bài
Xem bản gốc (English)Biểu diễn một phân số dưới dạng [tử số, mẫu số]. Áp dụng phép toán lên phân số thứ nhất và thứ hai: cộng, trừ, nhân hoặc chia. Với trị tuyệt đối, chỉ dùng phân số thứ nhất. Với lũy thừa, nâng phân số thứ nhất lên số mũ nguyên và bỏ qua phân số thứ hai. Trả về kết quả dưới dạng tối giản với mẫu số dương. Chuẩn hóa số 0 thành [0, 1]. Tất cả phép chia và lũy thừa âm trong dữ liệu hợp lệ đều xác định được.
Cài đặt hàm rational_arithmetic(operation, first, second, exponent).
Đầu vào
operation: Tên phép toán.
first: Hai số nguyên biểu diễn phân số thứ nhất.
second: Hai số nguyên biểu diễn phân số thứ hai; dùng [0, 1] khi không sử dụng.
exponent: Số mũ cho phép lũy thừa; dùng 0 cho các phép toán khác.
Đầu ra
Trả về [tử số, mẫu số] ở dạng tối giản với mẫu số dương.
Ràng buộc
operation là một trong các giá trị: add, subtract, multiply, divide, absolute hoặc power. Cả hai thành phần của phân số đều có giá trị tuyệt đối không quá 100; mẫu số khác 0. −6 ≤ exponent ≤ 6. Với phép chia, tử số của phân số thứ hai khác 0. Với lũy thừa âm, tử số của phân số thứ nhất khác 0. Lũy thừa 0 trả về [1, 1], kể cả 0⁰ theo quy ước của bài này. Giá trị kết quả nằm trong phạm vi số nguyên có dấu 64-bit.
Ví dụ
Đầu vào:
first = [1, 6]
second = [1, 4]
exponent = 0
operation = "add"
Kết quả mong đợi:
expected = [5, 12]
Đầu vào:
std::vector<long long> first = {1, 6};
std::vector<long long> second = {1, 4};
long long exponent = 0;
std::string operation = "add";
Kết quả mong đợi:
std::vector<long long> expected = {5, 12};
Đầu vào:
long[] first = new long[] {1, 6};
long[] second = new long[] {1, 4};
long exponent = 0;
string operation = "add";
Kết quả mong đợi:
long[] expected = new long[] {5, 12};
Giải thích
1/6 + 1/4 = 2/12 + 3/12 = 5/12, đã ở dạng tối giản.
Đầu vào:
first = [2, 3]
second = [0, 1]
exponent = -2
operation = "power"
Kết quả mong đợi:
expected = [9, 4]
Đầu vào:
std::vector<long long> first = {2, 3};
std::vector<long long> second = {0, 1};
long long exponent = -2;
std::string operation = "power";
Kết quả mong đợi:
std::vector<long long> expected = {9, 4};
Đầu vào:
long[] first = new long[] {2, 3};
long[] second = new long[] {0, 1};
long exponent = -2;
string operation = "power";
Kết quả mong đợi:
long[] expected = new long[] {9, 4};
Giải thích
Số mũ âm sẽ đảo phân số: (2/3)⁻² = (3/2)² = 9/4.
Tham khảo
Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.