Problema
Ver original (inglês)Represente uma fração como [numerador, denominador]. Aplique a operação à primeira e à segunda fração: soma, subtração, multiplicação ou divisão. Para valor absoluto, use apenas a primeira. Para potência, eleve a primeira ao expoente inteiro e ignore a segunda. Retorne nos menores termos, com denominador positivo. Normalize zero para [0, 1]. Todas as divisões e potências negativas em entradas válidas são definidas.
Implemente rational_arithmetic(operation, first, second, exponent).
Entrada
operation: O nome da operação.
first: Dois inteiros representando a primeira fração.
second: Dois inteiros representando a segunda fração; use [0, 1] quando não utilizada.
exponent: O expoente para potência; use 0 para outras operações.
Saída
Retorne [numerador, denominador] em forma reduzida, com denominador positivo.
Restrições
operation é add, subtract, multiply, divide, absolute ou power. Ambos os componentes das frações têm módulo no máximo 100; denominadores são diferentes de zero. −6 ≤ exponent ≤ 6. Para divide, o numerador da segunda é diferente de zero. Para potência negativa, o numerador da primeira é diferente de zero. A potência 0 retorna [1, 1], incluindo 0⁰ conforme a convenção desta tarefa. Os valores cabem em 64 bits com sinal.
Exemplos
Entrada:
first = [1, 6]
second = [1, 4]
exponent = 0
operation = "add"
Saída esperada:
expected = [5, 12]
Entrada:
std::vector<long long> first = {1, 6};
std::vector<long long> second = {1, 4};
long long exponent = 0;
std::string operation = "add";
Saída esperada:
std::vector<long long> expected = {5, 12};
Entrada:
long[] first = new long[] {1, 6};
long[] second = new long[] {1, 4};
long exponent = 0;
string operation = "add";
Saída esperada:
long[] expected = new long[] {5, 12};
Explicação
1/6 + 1/4 = 2/12 + 3/12 = 5/12, já está reduzido.
Entrada:
first = [2, 3]
second = [0, 1]
exponent = -2
operation = "power"
Saída esperada:
expected = [9, 4]
Entrada:
std::vector<long long> first = {2, 3};
std::vector<long long> second = {0, 1};
long long exponent = -2;
std::string operation = "power";
Saída esperada:
std::vector<long long> expected = {9, 4};
Entrada:
long[] first = new long[] {2, 3};
long[] second = new long[] {0, 1};
long exponent = -2;
string operation = "power";
Saída esperada:
long[] expected = new long[] {9, 4};
Explicação
Um expoente negativo inverte a fração: (2/3)⁻² = (3/2)² = 9/4.
Referências
Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.