Условие
Represent a fraction as [numerator, denominator]. Apply operation to first and second: add, subtract, multiply, or divide. For absolute, use only first. For power, raise first to the integer exponent and ignore second. Return lowest terms with a positive denominator. Normalize zero to [0, 1]. All divisions and negative powers in valid inputs are defined.
Implement rational_arithmetic(operation, first, second, exponent).
Input
operation: The operation name.
first: Two integers representing the first fraction.
second: Two integers representing the second fraction; use [0, 1] when unused.
exponent: The exponent for power; use 0 for other operations.
Output
Return [numerator, denominator] in reduced form with a positive denominator.
Ограничения
operation is add, subtract, multiply, divide, absolute, or power. Both fraction components have magnitude at most 100; denominators are nonzero. −6 ≤ exponent ≤ 6. For divide, second has nonzero numerator. For a negative power, first has nonzero numerator. The 0th power is [1, 1], including 0⁰ by this task’s convention. Values fit signed 64-bit.
Примеры
Ввод:
first = [1, 6]
second = [1, 4]
exponent = 0
operation = "add"
Ожидаемый вывод:
expected = [5, 12]
Ввод:
std::vector<long long> first = {1, 6};
std::vector<long long> second = {1, 4};
long long exponent = 0;
std::string operation = "add";
Ожидаемый вывод:
std::vector<long long> expected = {5, 12};
Ввод:
long[] first = new long[] {1, 6};
long[] second = new long[] {1, 4};
long exponent = 0;
string operation = "add";
Ожидаемый вывод:
long[] expected = new long[] {5, 12};
Пояснение
1/6 + 1/4 = 2/12 + 3/12 = 5/12, already reduced.
Ввод:
first = [2, 3]
second = [0, 1]
exponent = -2
operation = "power"
Ожидаемый вывод:
expected = [9, 4]
Ввод:
std::vector<long long> first = {2, 3};
std::vector<long long> second = {0, 1};
long long exponent = -2;
std::string operation = "power";
Ожидаемый вывод:
std::vector<long long> expected = {9, 4};
Ввод:
long[] first = new long[] {2, 3};
long[] second = new long[] {0, 1};
long exponent = -2;
string operation = "power";
Ожидаемый вывод:
long[] expected = new long[] {9, 4};
Пояснение
A negative exponent inverts the fraction: (2/3)⁻² = (3/2)² = 9/4.
Как подступиться
Сначала попробуйте сами, затем открывайте подсказки по одной.
Подсказка 1
Convert each fraction to a common representation and combine the numerators according to the chosen operation.
Подсказка 2
After the operation, reduce the result by dividing by the greatest common divisor and make the denominator positive.
Подсказка 3
Watch special cases like zero results, absolute value, and the power rule’s zero and negative exponents.
Ожидаемая сложность
O(log n) time, O(1) extra space
Ссылки
Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.