Trung bình 0 đã giải Tỷ lệ chấp nhận 0%

Exact Fraction Arithmetic

Perform fraction operations and return a reduced fraction.

Bạn sẽ học được gì

  • Add, subtract, multiply and divide fractions
  • Reduce results with the GCD
  • Normalize signs and zero

Đề bài

Xem bản dịch

Represent a fraction as [numerator, denominator]. Apply operation to first and second: add, subtract, multiply, or divide. For absolute, use only first. For power, raise first to the integer exponent and ignore second. Return lowest terms with a positive denominator. Normalize zero to [0, 1]. All divisions and negative powers in valid inputs are defined.

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

Input

operation: The operation name.

first: Two integers representing the first fraction.

second: Two integers representing the second fraction; use [0, 1] when unused.

exponent: The exponent for power; use 0 for other operations.

Output

Return [numerator, denominator] in reduced form with a positive denominator.

Ràng buộc

operation is add, subtract, multiply, divide, absolute, or power. Both fraction components have magnitude at most 100; denominators are nonzero. −6 ≤ exponent ≤ 6. For divide, second has nonzero numerator. For a negative power, first has nonzero numerator. The 0th power is [1, 1], including 0⁰ by this task’s convention. Values fit signed 64-bit.

Ví dụ

Ví dụ 1
Đầu vào:
first = [1, 6]
second = [1, 4]
exponent = 0
operation = "add"

Kết quả mong đợi:
expected = [5, 12]
Đầu vào:
std::vector<long long> first = {1, 6};
std::vector<long long> second = {1, 4};
long long exponent = 0;
std::string operation = "add";

Kết quả mong đợi:
std::vector<long long> expected = {5, 12};
Đầu vào:
long[] first = new long[] {1, 6};
long[] second = new long[] {1, 4};
long exponent = 0;
string operation = "add";

Kết quả mong đợi:
long[] expected = new long[] {5, 12};

Giải thích

1/6 + 1/4 = 2/12 + 3/12 = 5/12, already reduced.

Ví dụ 2
Đầu vào:
first = [2, 3]
second = [0, 1]
exponent = -2
operation = "power"

Kết quả mong đợi:
expected = [9, 4]
Đầu vào:
std::vector<long long> first = {2, 3};
std::vector<long long> second = {0, 1};
long long exponent = -2;
std::string operation = "power";

Kết quả mong đợi:
std::vector<long long> expected = {9, 4};
Đầu vào:
long[] first = new long[] {2, 3};
long[] second = new long[] {0, 1};
long exponent = -2;
string operation = "power";

Kết quả mong đợi:
long[] expected = new long[] {9, 4};

Giải thích

A negative exponent inverts the fraction: (2/3)⁻² = (3/2)² = 9/4.

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

Convert each fraction to a common representation and combine the numerators according to the chosen operation.

Gợi ý 2

After the operation, reduce the result by dividing by the greatest common divisor and make the denominator positive.

Gợi ý 3

Watch special cases like zero results, absolute value, and the power rule’s zero and negative exponents.

Độ phức tạp mong đợi

O(log n) time, O(1) extra space

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.