Todos os desafios
Médio 0 resolvidos 0% de aceitação

Aritmética Exata de Frações

Realize operações com frações e retorne uma fração reduzida.

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

Exemplo 1
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.

Exemplo 2
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.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.