ধরি আমাদের একটি স্ট্রিং আছে যা একটি ম্যাথম্যাটিক্যাল এক্সপ্রেশন রিপ্রেজেন্ট করে (+, -, *, /)। এখানে / হলো ইন্টিজার ডিভিশন। আমাদের বিল্ট-ইন ফাংশন ব্যবহার না করে এক্সপ্রেশনটি ইভ্যালুয়েট করে রেজাল্ট রিটার্ন করতে হবে।
তাই, ইনপুট যদি s = "2+3*5/7" হয়, তবে আউটপুট হবে ৪, কারণ ২ + ((৩ * ৫) / ৭) = ৪।
সমাধানের ধাপগুলো:
s:= দেওয়া স্ট্রিং রিভার্স করুনget_value()ফাংশন ডিফাইন করুনsign := 1- যদি
sখালি নয় এবং লাস্ট এলিমেন্ট-হয়, তবে- লাস্ট এলিমেন্ট ডিলিট করুন
sign := -1
value := 0- যখন
sখালি নয় এবং লাস্ট এলিমেন্ট ডিজিট হয়, করুনvalue := value * 10value := value + numeric value of last element, এবং লাস্ট এলিমেন্ট ডিলিট করুন
sign * valueরিটার্ন করুন
get_term()ফাংশন ডিফাইন করুনterm := get_value()- যখন
sখালি নয় এবং লাস্ট এলিমেন্ট*বা/হয়, করুনop := last element, এবং ডিলিট করুনvalue := get_value()- যদি
op == "*", তবেterm := term * value - অন্যথায়,
term := floor(1.0 * term / value)
termরিটার্ন করুন
- মেইন মেথড থেকে করুন
ans := get_term()- যখন
sখালি নয়, করুনop := last element, এবং ডিলিট করুন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