中級 0件解決済み 正答率0%

正確な分数演算

分数の演算を行い、約分された分数を返してください。

分数は [分子, 分母] で表します。最初と2番目の分数に対して、加算・減算・乗算・除算のいずれかの演算を適用してください。絶対値の場合は最初の分数のみを使用します。べき乗の場合は、最初の分数を整数の指数で累乗し、2番目の分数は無視します。結果は、分母が正で約分された形で返してください。ゼロは [0, 1] に正規化してください。すべての除算および負のべき乗は、入力が有効な場合に定義されています。

rational_arithmetic(operation, first, second, exponent) を実装してください。

入力

operation: 演算名。

first: 最初の分数を表す2つの整数。

second: 2番目の分数を表す2つの整数。使用しない場合は [0, 1] を指定してください。

exponent: べき乗の指数。他の演算では 0 を指定してください。

出力

約分され、分母が正の [分子, 分母] を返してください。

制約

operation は add, subtract, multiply, divide, absolute, power のいずれかです。両方の分数の各成分の絶対値は最大100です。分母はゼロではありません。−6 ≤ exponent ≤ 6 です。divide の場合、second の分子はゼロではありません。負のべき乗の場合、first の分子はゼロではありません。0乗は [1, 1] です(この課題の規定により 0⁰ も含みます)。値は符号付き64ビット整数に収まります。

例

例 1
入力:
first = [1, 6]
second = [1, 4]
exponent = 0
operation = "add"

期待される出力:
expected = [5, 12]
入力:
std::vector<long long> first = {1, 6};
std::vector<long long> second = {1, 4};
long long exponent = 0;
std::string operation = "add";

期待される出力:
std::vector<long long> expected = {5, 12};
入力:
long[] first = new long[] {1, 6};
long[] second = new long[] {1, 4};
long exponent = 0;
string operation = "add";

期待される出力:
long[] expected = new long[] {5, 12};

解説

1/6 + 1/4 = 2/12 + 3/12 = 5/12 となり、すでに約分されています。

例 2
入力:
first = [2, 3]
second = [0, 1]
exponent = -2
operation = "power"

期待される出力:
expected = [9, 4]
入力:
std::vector<long long> first = {2, 3};
std::vector<long long> second = {0, 1};
long long exponent = -2;
std::string operation = "power";

期待される出力:
std::vector<long long> expected = {9, 4};
入力:
long[] first = new long[] {2, 3};
long[] second = new long[] {0, 1};
long exponent = -2;
string operation = "power";

期待される出力:
long[] expected = new long[] {9, 4};

解説

負の指数は分数を逆数にします: (2/3)⁻² = (3/2)² = 9/4。

参考資料

この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。

他の人の解答から学ぶ

コミュニティの解答

まだ公開された解答がありません。この課題を解いて最初の解答を共有しましょう。