問題
原文(英語)を表示分数は [分子, 分母] で表します。最初と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ビット整数に収まります。
例
入力:
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 となり、すでに約分されています。
入力:
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用に調整されています。上記の説明と制約に従ってください。