কম্পিউটার

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


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

সুতরাং, ইনপুট যদি "6-4 / 2" এর মত হয়, তাহলে আউটপুট হবে 4

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • l1 :=0, l2 :=1

  • o1 :=1, o2 :=1

  • একটি স্ট্যাক স্ট্যাক সংজ্ঞায়িত করুন

  • n :=s

    এর আকার
  • আরম্ভ করার জন্য i :=0, যখন i

    • x :=s[i]

    • যদি x>='0' এবং x <='9' হয়, তাহলে −

      • সংখ্যা :=x - '0'

      • যখন (i + 1 ='0' এবং s[i + 1] <='9'), করো −

        • (i 1 দ্বারা বাড়ান)

        • সংখ্যা :=(সংখ্যা * 10) + (s[i] - '0')

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

    • অন্যথায় যখন x '(' এর মত হয়, তখন −

      • l1কে st-এ ঢোকান, st-এ o1 ঢোকান

      • st-এ l2 ঢোকান, st-এ o2 ঢোকান

      • l1 :=0, o2 :=1

      • o1 :=1, l2 :=1

    • অন্যথায় যখন x ')' এর মত হয়, তখন −

      • তাপমাত্রা :=l1 + o1 * l2

      • o2 :=st

        এর শীর্ষ উপাদান
      • st

        থেকে উপাদান মুছুন
      • l2 :=st

        এর শীর্ষ উপাদান
      • st

        থেকে উপাদান মুছুন
      • o1 :=st

        এর শীর্ষ উপাদান
      • st

        থেকে উপাদান মুছুন
      • l1 :=st

        এর শীর্ষ উপাদান
      • st

        থেকে উপাদান মুছুন
      • l2 :=(যদি o2 1 এর মত হয়, তাহলে l2 * temp, অন্যথায় l2 / temp)

    • অন্যথায় যখন x '*' এর মতো বা x '/' এর মতো, তখন −

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

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

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

        • o1 :=-1

        • নিম্নলিখিত অংশ উপেক্ষা করুন, পরবর্তী পুনরাবৃত্তি এড়িয়ে যান

      • l1 :=l1 + o1 * l2

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

      • 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++ এ বেসিক গ্রাফিক প্রোগ্রামিং