Tutte le sfide
Media 0 risolte 0% di accettazione

Aritmetica Esatta con Frazioni

Esegui operazioni tra frazioni e restituisci una frazione ridotta ai minimi termini.

Rappresenta una frazione come [numeratore, denominatore]. Applica l'operazione tra la prima e la seconda frazione: somma, sottrazione, moltiplicazione o divisione. Per il valore assoluto, usa solo la prima. Per la potenza, eleva la prima frazione all'esponente intero e ignora la seconda. Restituisci la frazione ai minimi termini con denominatore positivo. Normalizza lo zero a [0, 1]. Tutte le divisioni e le potenze negative negli input validi sono definite.

Implementa rational_arithmetic(operation, first, second, exponent).

Input

operation: Il nome dell'operazione.

first: Due interi che rappresentano la prima frazione.

second: Due interi che rappresentano la seconda frazione; usa [0, 1] quando non serve.

exponent: L'esponente per la potenza; usa 0 per le altre operazioni.

Output

Restituisci [numeratore, denominatore] in forma ridotta con denominatore positivo.

Vincoli

operation è add, subtract, multiply, divide, absolute o power. Entrambi i componenti delle frazioni hanno valore assoluto al massimo 100; i denominatori sono diversi da zero. −6 ≤ exponent ≤ 6. Per divide, la seconda frazione ha numeratore diverso da zero. Per una potenza negativa, la prima frazione ha numeratore diverso da zero. La potenza 0 restituisce [1, 1], incluso 0⁰ come da convenzione di questo esercizio. I valori rientrano nei 64 bit con segno.

Esempi

Esempio 1
Input:
first = [1, 6]
second = [1, 4]
exponent = 0
operation = "add"

Output atteso:
expected = [5, 12]
Input:
std::vector<long long> first = {1, 6};
std::vector<long long> second = {1, 4};
long long exponent = 0;
std::string operation = "add";

Output atteso:
std::vector<long long> expected = {5, 12};
Input:
long[] first = new long[] {1, 6};
long[] second = new long[] {1, 4};
long exponent = 0;
string operation = "add";

Output atteso:
long[] expected = new long[] {5, 12};

Spiegazione

1/6 + 1/4 = 2/12 + 3/12 = 5/12, già ridotta ai minimi termini.

Esempio 2
Input:
first = [2, 3]
second = [0, 1]
exponent = -2
operation = "power"

Output atteso:
expected = [9, 4]
Input:
std::vector<long long> first = {2, 3};
std::vector<long long> second = {0, 1};
long long exponent = -2;
std::string operation = "power";

Output atteso:
std::vector<long long> expected = {9, 4};
Input:
long[] first = new long[] {2, 3};
long[] second = new long[] {0, 1};
long exponent = -2;
string operation = "power";

Output atteso:
long[] expected = new long[] {9, 4};

Spiegazione

Un esponente negativo inverte la frazione: (2/3)⁻² = (3/2)² = 9/4.

Riferimenti

Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.

Impara dagli altri

Soluzioni della community

Nessuna soluzione pubblicata. Risolvi questa sfida per condividere la prima.