Tous les défis
Moyen 0 résolus 0 % de réussite

Arithmétique exacte des fractions

Effectuez des opérations sur des fractions et retournez une fraction réduite.

Représentez une fraction sous la forme [numérateur, dénominateur]. Appliquez l’opération à la première et à la seconde : addition, soustraction, multiplication ou division. Pour la valeur absolue, utilisez uniquement la première. Pour la puissance, élevez la première à l’exposant entier et ignorez la seconde. Retournez le résultat sous forme irréductible avec un dénominateur positif. Normalisez zéro en [0, 1]. Toutes les divisions et puissances négatives dans les entrées valides sont définies.

Implémentez rational_arithmetic(operation, first, second, exponent).

Entrée

operation : Le nom de l’opération.

first : Deux entiers représentant la première fraction.

second : Deux entiers représentant la seconde fraction ; utilisez [0, 1] lorsqu’elle n’est pas utilisée.

exponent : L’exposant pour la puissance ; utilisez 0 pour les autres opérations.

Sortie

Retournez [numérateur, dénominateur] sous forme réduite avec un dénominateur positif.

Contraintes

operation vaut add, subtract, multiply, divide, absolute ou power. Les deux composantes des fractions ont une valeur absolue maximale de 100 ; les dénominateurs sont non nuls. −6 ≤ exponent ≤ 6. Pour divide, le numérateur de second est non nul. Pour une puissance négative, le numérateur de first est non nul. La puissance 0 donne [1, 1], y compris pour 0⁰ selon la convention de cet exercice. Les valeurs tiennent dans un entier signé 64 bits.

Exemples

Exemple 1
Entrée :
first = [1, 6]
second = [1, 4]
exponent = 0
operation = "add"

Sortie attendue :
expected = [5, 12]
Entrée :
std::vector<long long> first = {1, 6};
std::vector<long long> second = {1, 4};
long long exponent = 0;
std::string operation = "add";

Sortie attendue :
std::vector<long long> expected = {5, 12};
Entrée :
long[] first = new long[] {1, 6};
long[] second = new long[] {1, 4};
long exponent = 0;
string operation = "add";

Sortie attendue :
long[] expected = new long[] {5, 12};

Explication

1/6 + 1/4 = 2/12 + 3/12 = 5/12, déjà irréductible.

Exemple 2
Entrée :
first = [2, 3]
second = [0, 1]
exponent = -2
operation = "power"

Sortie attendue :
expected = [9, 4]
Entrée :
std::vector<long long> first = {2, 3};
std::vector<long long> second = {0, 1};
long long exponent = -2;
std::string operation = "power";

Sortie attendue :
std::vector<long long> expected = {9, 4};
Entrée :
long[] first = new long[] {2, 3};
long[] second = new long[] {0, 1};
long exponent = -2;
string operation = "power";

Sortie attendue :
long[] expected = new long[] {9, 4};

Explication

Un exposant négatif inverse la fraction : (2/3)⁻² = (3/2)² = 9/4.

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.