मान लीजिए हमारे पास एक स्ट्रिंग है जो (+, -, *, /) के साथ एक गणितीय अभिव्यक्ति को दर्शाती है। यहां / पूर्णांक विभाजन को दर्शाता है, हमें किसी भी बिल्ट-इन फ़ंक्शन का उपयोग किए बिना इसका मूल्यांकन करना और परिणाम लौटाना है।
इसलिए, यदि इनपुट इस तरह है s = "2+3*5/7", तो आउटपुट 4 होगा, क्योंकि 2 + ((3 * 5) / 7) = 4
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- s := दी गई स्ट्रिंग को रिवर्स करें
- get_value() फ़ंक्शन परिभाषित करें।
- sign := 1
- यदि s खाली नहीं है और s का अंतिम तत्व "-" के समान है, तो
- s से अंतिम तत्व हटाएं
- sign := -1
- value := 0
- जब तक s खाली नहीं है और s का अंतिम तत्व एक अंक है, करें
- value := value * 10
- value := value + s के अंतिम तत्व का संख्यात्मक मान, और s का अंतिम तत्व हटाएं
- sign * value लौटाएं
- get_term() फ़ंक्शन परिभाषित करें
- term := get_value()
- जब तक s खाली नहीं है और s का अंतिम तत्व या तो * या / है, करें
- op := s का अंतिम तत्व और s से अंतिम तत्व हटाएं
- value := get_value()
- यदि op, "*" के समान है, तो
- term := term * value
- अन्यथा,
- term := (1.0 * term / value) का फ्लोर
- term लौटाएं
- मुख्य मेथड से निम्नलिखित करें:
- ans := get_term()
- जब तक s खाली नहीं है, करें
- op := s का अंतिम तत्व, और इसे s से हटाएं
- term := get_term()
- यदि op, "+" के समान है, तो
- ans := ans + term
- अन्यथा,
- ans := ans - term
- ans लौटाएं
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
from math import floor, trunc
class Solution:
def solve(self, s):
s = list(s[::-1])
def get_value():
sign = 1
if s and s[-1] == "-":
s.pop()
sign = -1
value = 0
while s and s[-1].isdigit():
value *= 10
value += int(s.pop())
return sign * value
def get_term():
term = get_value()
while s and s[-1] in "*/":
op = s.pop()
value = get_value()
if op == "*":
term *= value
else:
term = floor(1.0 * term / value)
return term
ans = get_term()
while s:
op, term = s.pop(), get_term()
if op == "+":
ans += term
else:
ans -= term
return ans
ob = Solution()
s = "2+3*5/7"
print(ob.solve(s))इनपुट
"2+3*5/7"
आउटपुट
4