โจทย์ทั้งหมด
ปานกลาง 0 ข้อที่แก้แล้ว อัตราผ่าน 0%

การคำนวณเศษส่วนอย่างแม่นยำ

ดำเนินการกับเศษส่วนและคืนค่าเศษส่วนที่ย่อส่วนแล้ว

แทนค่าเศษส่วนด้วย [ตัวเศษ, ตัวส่วน] ดำเนินการกับตัวแรกและตัวที่สอง: บวก, ลบ, คูณ หรือ หาร สำหรับค่าสัมบูรณ์ ใช้เฉพาะตัวแรก สำหรับยกกำลัง ให้นำตัวแรกยกกำลังเลขจำนวนเต็มและไม่สนใจตัวที่สอง คืนค่าในรูปเศษส่วนต่ำสุดโดยตัวส่วนเป็นบวก กรณีศูนย์ให้ปรับเป็น [0, 1] ทุกการหารและการยกกำลังติดลบในอินพุตที่ถูกต้องจะนิยามค่าไว้แล้ว

ให้เขียนฟังก์ชัน rational_arithmetic(operation, first, second, exponent)

อินพุต

operation: ชื่อของการดำเนินการ

first: จำนวนเต็มสองจำนวนแทนเศษส่วนตัวแรก

second: จำนวนเต็มสองจำนวนแทนเศษส่วนตัวที่สอง; ใช้ [0, 1] เมื่อไม่ใช้งาน

exponent: เลขชี้กำลังสำหรับการยกกำลัง; ใช้ 0 สำหรับการดำเนินการอื่น

เอาต์พุต

คืนค่า [ตัวเศษ, ตัวส่วน] ในรูปที่ย่อส่วนแล้วและตัวส่วนเป็นบวก

เงื่อนไข

operation ต้องเป็น add, subtract, multiply, divide, absolute หรือ power องค์ประกอบของเศษส่วนแต่ละตัวมีค่าสูงสุดไม่เกิน 100; ตัวส่วนไม่เป็นศูนย์ −6 ≤ exponent ≤ 6 สำหรับ divide ตัวที่สองต้องมีตัวเศษไม่เป็นศูนย์ สำหรับการยกกำลังติดลบ ตัวแรกต้องมีตัวเศษไม่เป็นศูนย์ กำลังศูนย์ให้เป็น [1, 1] รวมถึง 0⁰ ตามข้อกำหนดข้อนี้ ค่าทั้งหมดอยู่ในช่วง signed 64-bit

ตัวอย่าง

ตัวอย่างที่ 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 กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน

เรียนรู้จากคนอื่น

แนวทางจากชุมชน

ยังไม่มีวิธีทำที่เผยแพร่ ลองแก้โจทย์นี้เพื่อแชร์วิธีแรก