Tất cả thử thách
Trung bình 0 đã giải Tỷ lệ chấp nhận 0%

Phép toán phân số chính xác

Thực hiện các phép toán phân số và trả về phân số tối giản.

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ụ

Ví dụ 1
Đầ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.

Ví dụ 2
Đầ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.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.