ধরুন আমাদের একটি স্ট্রিং আছে যা (+, -, *, /) দিয়ে একটি গাণিতিক রাশির প্রতিনিধিত্ব করে এখানে / পূর্ণসংখ্যা বিভাগের প্রতিনিধিত্ব করছে, আমাদের কোনো বিল্ট-ইন ফাংশন ব্যবহার না করেই ফলাফল মূল্যায়ন করতে হবে এবং ফেরত দিতে হবে।
সুতরাং, যদি ইনপুটটি s ="2+3*5/7" এর মত হয়, তাহলে আউটপুট হবে 4, যেমন 2 + (3 * 5) / 7) =4
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- s :=প্রদত্ত স্ট্রিংটি বিপরীত করুন
- একটি ফাংশন get_value() সংজ্ঞায়িত করুন।
- চিহ্ন :=1
- যদি s খালি না হয় এবং s-এর শেষ উপাদান "-" এর মত হয়, তাহলে
- s থেকে শেষ উপাদান মুছুন
- চিহ্ন :=-1
- মান :=0
- যখন s খালি নয় এবং s এর শেষ উপাদানটি একটি অঙ্ক, do
- মান :=মান * 10
- মান :=মান + s থেকে শেষ উপাদানটির সাংখ্যিক মান এবং s-এর শেষ উপাদানটি মুছুন
- রিটার্ন সাইন * মান
- একটি ফাংশন get_term() সংজ্ঞায়িত করুন
- টার্ম :=get_value()
- যখন s খালি নয় এবং s এর শেষ উপাদানটি হয় * বা /, do
- op :=s এর শেষ উপাদান এবং s থেকে শেষ উপাদান মুছুন
- মান :=get_value()
- যদি op "*" এর মত হয়, তাহলে
- টার্ম :=টার্ম * মান
- অন্যথায়,
- টার্ম :=ফ্লোর অফ (1.0 * টার্ম / মান)
- রিটার্ন টার্ম
- প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন:
- উত্তর :=get_term()
- যখন s খালি নয়, কর
- op :=s এর শেষ উপাদান, এবং s থেকে মুছে দিন
- টার্ম :=get_term()
- যদি op "+" এর মত হয়, তাহলে
- উত্তর :=উত্তর + পদ
- অন্যথায়,
- উত্তর :=উত্তর - পদ
- উত্তর ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
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