समस्या
एक भिन्न को [अंश, हर] के रूप में दर्शाएँ। पहले और दूसरे भिन्न पर ऑपरेशन लागू करें: जोड़, घटाव, गुणा या भाग। absolute के लिए केवल पहले का उपयोग करें। power के लिए पहले को पूर्णांक घात तक उठाएँ और दूसरे को अनदेखा करें। परिणाम को न्यूनतम रूप में सकारात्मक हर के साथ लौटाएँ। शून्य को [0, 1] के रूप में सामान्यीकृत करें। सभी भाग और ऋणात्मक घात मान्य इनपुट में परिभाषित हैं।
rational_arithmetic(operation, first, second, exponent) लागू करें।
इनपुट
operation: ऑपरेशन का नाम।
first: पहले भिन्न को दर्शाने वाले दो पूर्णांक।
second: दूसरे भिन्न को दर्शाने वाले दो पूर्णांक; जब उपयोग न हो तो [0, 1] दें।
exponent: power के लिए घात; अन्य ऑपरेशनों के लिए 0 दें।
आउटपुट
सरलीकृत रूप में [अंश, हर] लौटाएँ, जिसमें हर सकारात्मक हो।
सीमाएँ
operation add, subtract, multiply, divide, absolute या power में से एक है। दोनों भिन्न के घटकों का परिमाण अधिकतम 100 है; हर कभी शून्य नहीं है। −6 ≤ exponent ≤ 6। divide के लिए, दूसरे का अंश शून्य नहीं है। ऋणात्मक घात के लिए, पहले का अंश शून्य नहीं है। 0वीं घात [1, 1] है, इस कार्य के अनुसार 0⁰ भी। सभी मान signed 64-bit में समा सकते हैं।
उदाहरण
इनपुट:
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।
कैसे हल करें
पहले खुद कोशिश करें, फिर एक-एक करके संकेत खोलें।
संकेत 1
हर fraction को एक common representation में लाओ और चुने गए operation के अनुसार numerators combine करो।
संकेत 2
Operation के बाद, greatest common divisor से divide करके result reduce करो और denominator positive रखो।
संकेत 3
Zero results, absolute value, और power rule के zero तथा negative exponents जैसे special cases पर ध्यान दो।
अपेक्षित जटिलता
समय O(log n), अतिरिक्त स्थान O(1)
संदर्भ
यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।