কম্পিউটার টিউটোরিয়াল

সি++-এ বেসিক ক্যালকুলেটর III


ধরা যাক একটি সিম্পল এক্সপ্রেশন স্ট্রিং আছে এবং আমাদের একটি বেসিক ক্যালকুলেটর বাস্তবায়ন করতে হবে যেটি এক্সপ্রেশনটি ইভ্যালুয়েট করবে। এক্সপ্রেশন স্ট্রিং-এ ওপেনিং এবং ক্লোজিং প্যারেনথেসিস, প্লাস + বা মাইনাস সাইন -, নন-নেগেটিভ ইন্টিজার এবং খালি স্পেস থাকতে পারে। এক্সপ্রেশন স্ট্রিং-এ শুধু নন-নেগেটিভ ইন্টিজার, +, -, *, / অপারেটর, ওপেনিং এবং ক্লোজিং প্যারেনথেসিস এবং খালি স্পেস থাকবে। ইন্টিজার ডিভিশন শূন্যের দিকে ট্রানকেট হবে।

তাই, যদি ইনপুট "6-4 / 2" হয়, তবে আউটপুট হবে 4

এটি সমাধান করতে, আমরা নিচের ধাপগুলো অনুসরণ করব -

  • l1 := 0, l2 := 1

  • o1 := 1, o2 := 1

  • একটি স্ট্যাক st ডিফাইন করুন

  • n := s-এর আকার

  • i := 0 থেকে শুরু করুন, যখন i < n, (i ১ করে বাড়ান), করুন -

    • x := s[i]

    • যদি x >= '0' এবং x <= '9', তবে -

      • num := x - '0'

      • যখন (i + 1 < n এবং s[i + 1] >= '0' এবং s[i + 1] <= '9'), করুন -

        • (i ১ করে বাড়ান)

        • num := (num * 10) + (s[i] - '0')

      • l2 := (যদি o2, ১-এর সমান হয়, তবে l2 * num, অন্যথায় l2 / num)

    • অন্যথায় যখন x, '('-এর সমান, তবে -

      • st-এ l1 ইনসার্ট করুন, st-এ o1 ইনসার্ট করুন

      • st-এ l2 ইনসার্ট করুন, st-এ o2 ইনসার্ট করুন

      • l1 := 0, o2 := 1

      • o1 := 1, l2 := 1

    • অন্যথায় যখন x, ')'-এর সমান, তবে -

      • temp := l1 + o1 * l2

      • o2 := st-এর টপ এলিমেন্ট

      • st-থেকে এলিমেন্ট ডিলিট করুন

      • l2 := st-এর টপ এলিমেন্ট

      • st-থেকে এলিমেন্ট ডিলিট করুন

      • o1 := st-এর টপ এলিমেন্ট

      • st-থেকে এলিমেন্ট ডিলিট করুন

      • l1 := st-এর টপ এলিমেন্ট

      • st-থেকে এলিমেন্ট ডিলিট করুন

      • l2 := (যদি o2, ১-এর সমান হয়, তবে l2 * temp, অন্যথায় l2 / temp)

    • অন্যথায় যখন x, '*'-এর সমান বা x, '/'-এর সমান, তবে -

      • o2 := (যদি x, '*'-এর সমান হয়, তবে ১, অন্যথায় -১)

    • অন্যথায় যখন x, '+'-এর সমান বা x, '-'-এর সমান, তবে -

      • যদি x, '-'-এর সমান হয় এবং (i, ০-এর সমান হয় বা (i - 1 >= 0 এবং s[i - 1], '('-এর সমান হয়)), তবে -

        • o1 := -1

        • পরবর্তী অংশ বাদ দিন, পরবর্তী ইটারেশনে যান

      • l1 := l1 + o1 * l2

      • o1 := (যদি x, '+'-এর সমান হয়, তবে ১, অন্যথায় -১)

      • l2 := 1, o2 := 1

  • l1 + o1 * l2 রিটার্ন করুন

বेहतर বোঝার জন্য নিচের বাস্তবায়নটি দেখুন -

উদাহরণ

#include <bits/stdc++.h> using namespace std; typedef long long int lli; class Solution {    public:    int calculate(string s) {       lli l1 = 0;       lli l2 = 1;       lli o1 = 1;       lli o2 = 1;       stack<lli> st;       lli n = s.size();       for (lli i = 0; i < n; i++) {          char x = s[i];          if (x >= '0' && x <= '9') {             lli num = x - '0';             while (i + 1 < n && s[i + 1] >= '0' && s[i + 1] <= '9') {                i++;                num = (num * 10) + (s[i] - '0');             }             l2 = (o2 == 1) ? l2 * num : l2 / num;          }          else if (x == '(') {             st.push(l1);             st.push(o1);             st.push(l2);             st.push(o2);             l1 = 0;             o2 = 1;             o1 = 1;             l2 = 1;          }          else if (x == ')') {             lli temp = l1 + o1 * l2;             o2 = st.top();             st.pop();             l2 = st.top();             st.pop();             o1 = st.top();             st.pop();             l1 = st.top();             st.pop();             l2 = (o2 == 1) ? l2 * temp : l2 / temp;          }          else if (x == '*' || x == '/') {             o2 = (x == '*') ? 1 : -1;          }          else if (x == '+' || x == '-') {             if (x == '-' && (i == 0 || (i - 1 >= 0 && s[i - 1] == '('))) {                o1 = -1;                continue;             }             l1 += o1 * l2;             o1 = (x == '+') ? 1 : -1;             l2 = 1;             o2 = 1;          }       }       return l1 + o1 * l2;    } }; main(){    Solution ob;    cout << (ob.calculate("(5+9*3)/8")); }

ইনপুট

"(5+9*3)/8"

আউটপুট

4

  1. C++-এ বাল্ব স্যুইচার III সমস্যা সমাধান

  2. C++-এ হাউস রবার III

  3. C++-এ পাথ সম III

  4. C++-এ বেসিক গ্রাফিক্স প্রোগ্রামিং