Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ . में बेसिक कैलकुलेटर III

मान लीजिए कि हमारे पास एक साधारण अभिव्यक्ति स्ट्रिंग है और हमें उस अभिव्यक्ति का मूल्यांकन करने के लिए एक बुनियादी कैलकुलेटर लागू करना होगा। एक्सप्रेशन स्ट्रिंग में ओपनिंग और क्लोजिंग कोष्ठक, प्लस + ​​या माइनस साइन -, गैर-ऋणात्मक पूर्णांक और रिक्त स्थान हो सकते हैं। व्यंजक स्ट्रिंग में केवल गैर-ऋणात्मक पूर्णांक, +, -, *, / ऑपरेटर, कोष्ठकों को खोलना और बंद करना और रिक्त स्थान शामिल हैं। पूर्णांक विभाजन शून्य की ओर छोटा होना चाहिए।

इसलिए, यदि इनपुट "6-4/2" जैसा है, तो आउटपुट 4

. होगा

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एल1:=0, एल2:=1

  • o1 :=1, o2 :=1

  • एक स्टैक सेंट परिभाषित करें

  • n :=s का आकार

  • इनिशियलाइज़ i:=0 के लिए, जब i

    • एक्स:=एस [i]

    • अगर x>='0' और x <='9', तो -

      • संख्या :=x - '0'

      • जबकि (i + 1 ='0' और s[i + 1] <='9'), करते हैं -

        • (i 1 से बढ़ाएँ)

        • संख्या:=(संख्या * 10) + (एस [i] - '0')

      • l2 :=(यदि o2 1 के समान है, तो l2 * num, अन्यथा l2 / num)

    • अन्यथा जब x '(' के समान हो, तब -

      • सेंट में l1 डालें, o1 को सेंट में डालें

      • सेंट में l2 डालें, o2 को सेंट में डालें

      • एल1:=0, ओ2:=1

      • ओ1:=1, एल2:=1

    • अन्यथा जब x ')' के समान हो, तब -

      • अस्थायी:=l1 + o1 * l2

      • o2:=सेंट का शीर्ष तत्व

      • सेंट से तत्व हटाएं

      • l2:=सेंट का शीर्ष तत्व

      • सेंट से तत्व हटाएं

      • o1 :=सेंट का शीर्ष तत्व

      • सेंट से तत्व हटाएं

      • l1:=सेंट का शीर्ष तत्व

      • सेंट से तत्व हटाएं

      • 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)

      • एल2:=1, ओ2:=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

    मान लीजिए कि एक चोर ने अपनी चोरी के लिए फिर से एक नई जगह ढूंढ ली है। इस क्षेत्र में केवल एक प्रवेश द्वार है, प्रवेश द्वार को रूट कहा जाता है। जड़ के अलावा, प्रत्येक घर में एक और केवल एक मूल घर होता है। एक दौरे के बाद, स्मार्ट चोर को लगा कि इस जगह के सभी घर एक बाइनरी ट्री बनाते हैं। और अगर एक ही रात

  1. सी++ में पथ योग III

    मान लीजिए कि हमने एक बाइनरी ट्री दिया है जिसमें प्रत्येक नोड में एक पूर्णांक कुंजी होती है। हमें उन पथों को खोजना है जो किसी दिए गए मान के योग हैं। रास्ता जड़ से पत्ती तक शुरू होना चाहिए। हमें वह रास्ता खोजना होगा जहां योग समान हो। अगर पेड़ [5,4,8,11,null,13,4,7,2,null,null,5,1] जैसा है, और योग 22

  1. C++ में बेसिक ग्राफिक प्रोग्रामिंग

    C++ प्रोग्रामिंग भाषा एक बहुमुखी प्रोग्रामिंग भाषा है। C++ का उपयोग करके आप लो-एंड ग्राफ़िक्स भी बना सकते हैं यानी स्टाइलिश फ़ॉन्ट्स के साथ मूल आकार और शब्द बनाना और उनमें रंग जोड़ना c++ का उपयोग करके किया जा सकता है। ग्राफिक प्रोग्रामिंग आपके टर्मिनल या कमांड प्रॉम्प्ट का उपयोग करके c++ में की जा