Problème
Afficher l’original (anglais)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
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.
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.