Alle Herausforderungen
Mittel 0 gelöst 0% Erfolgsquote

Exakte Bruchrechnung

Führe Bruchoperationen durch und gib einen gekürzten Bruch zurück.

Stelle einen Bruch als [Zähler, Nenner] dar. Wende die Operation auf den ersten und zweiten Bruch an: addieren, subtrahieren, multiplizieren oder dividieren. Für den Betrag verwende nur den ersten Bruch. Für Potenzen hebe den ersten Bruch auf den ganzzahligen Exponenten und ignoriere den zweiten. Gib das Ergebnis in vollständig gekürzter Form mit positivem Nenner zurück. Normiere Null zu [0, 1]. Alle Divisionen und negativen Potenzen in gültigen Eingaben sind definiert.

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

Eingabe

operation: Der Name der Operation.

first: Zwei ganze Zahlen, die den ersten Bruch darstellen.

second: Zwei ganze Zahlen, die den zweiten Bruch darstellen; verwende [0, 1], wenn nicht benötigt.

exponent: Der Exponent für Potenzen; bei anderen Operationen 0 verwenden.

Ausgabe

Gib [Zähler, Nenner] in gekürzter Form mit positivem Nenner zurück.

Einschränkungen

operation ist add, subtract, multiply, divide, absolute oder power. Beide Bruchkomponenten haben einen Betrag von höchstens 100; Nenner sind ungleich null. −6 ≤ exponent ≤ 6. Bei divide hat der zweite Bruch einen Zähler ungleich null. Bei einer negativen Potenz hat der erste Bruch einen Zähler ungleich null. Die 0. Potenz ist [1, 1], einschließlich 0⁰ gemäß dieser Aufgabenstellung. Alle Werte passen in ein vorzeichenbehaftetes 64-Bit-Integer.

Beispiele

Beispiel 1
Eingabe:
first = [1, 6]
second = [1, 4]
exponent = 0
operation = "add"

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

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

Erwartete Ausgabe:
long[] expected = new long[] {5, 12};

Erläuterung

1/6 + 1/4 = 2/12 + 3/12 = 5/12, bereits gekürzt.

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

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

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

Erwartete Ausgabe:
long[] expected = new long[] {9, 4};

Erläuterung

Ein negativer Exponent kehrt den Bruch um: (2/3)⁻² = (3/2)² = 9/4.

Referenzen

Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.

Von anderen lernen

Community-Lösungen

Noch keine veröffentlichten Lösungen. Löse die Aufgabe und teile als Erster eine Lösung.