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

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


मान लीजिए हम एक बेसिक कैलकुलेटर बनाना चाहते हैं जो बेसिक अभिव्यक्ति परिणाम ढूंढेगा। अभिव्यक्ति में खुले और बंद कोष्ठक, प्लस या माइनस प्रतीक और खाली स्थान हो सकते हैं।

तो यदि स्ट्रिंग "5 + 2 - 3" जैसी है, तो परिणाम 4 होगा।

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

  • ret := 0, sign := 1, num := 0, n := s का आकार

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

  • i := 0 से आरंभ करें, जब i < n, i को 1 से बढ़ाएं करें -

    • आकार i की एक सरणी x = s परिभाषित करें

    • यदि x >= '0' और x <= '9', तो,

      • num = num * 10

      • num = num + (x - '0')

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

      • ret = ret + (sign * num)

      • ret को st में डालें

      • sign को st में डालें

      • ret := 0, sign := 1, num := 0

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

      • ret = ret + (sign * num), sign := 1, num := 0

      • ret = ret * st का शीर्ष तत्व

      • st से आइटम हटाएं

      • ret = ret + st का शीर्ष तत्व

      • st से आइटम हटाएं

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

      • ret = ret + (sign * num), sign := 1, num := 0

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

      • ret = ret + (sign * num), sign := - 1, num := 0

  • यदि num शून्येतर है, तो,

    • ret = ret + sign * num

  • ret लौटाएं

उदाहरण 

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int calculate(string s) {       int ret = 0;       int sign = 1;       int num = 0;       int n = s.size();       stack <int> st;       for(int i = 0; i < n; ++i){          char x = s[i];          if(x >= '0' && x <= '9'){             num *= 10;             num += (x - '0');          }          else if(x == '('){             ret += (sign * num);             st.push(ret);             st.push(sign);             ret = 0;             sign = 1;             num = 0;          }          else if(x == ')'){             ret += (sign * num);             sign = 1;             num = 0;             ret *= st.top();             st.pop();             ret += st.top();             st.pop();          }          else if(x == '+'){             ret += (sign * num);             sign = 1;             num = 0;          }          else if(x == '-'){             ret += (sign * num);             sign = -1;             num = 0;          }       }       if(num){          ret += sign * num;       }       return ret;    } }; main(){    Solution ob;    cout << (ob.calculate("5 + 2 - 3")); }

इनपुट

"5 + 2 - 3"

आउटपुट

4

  1. C++ में जंप गेम V C++ में जंप गेम V

    मान लीजिए हमारे पास arr नामक पूर्णांकों की एक सरणी और एक पूर्णांक d है। एक चरण में हम इंडेक्स i से कूद सकते हैं: i + x जहां: i + x < n और x की सीमा 1 से d है। = 0 और x की सीमा 1 से d है। arr[k] हो। हम सरणी के किसी भी इंडेक्स से कूदना शुरू कर सकते हैं। हमें अधिकतम इंडेक्स की संख्या ज्ञात करनी है ज

  1. - C++ में K डिजिट्स हटाना

    मान लीजिए हमारे पास एक नॉन-नेगेटिव इंटीजर num है जिसे स्ट्रिंग के रूप में दर्शाया गया है, हमें नंबर से k डिजिट्स हटाने हैं ताकि नया नंबर सबसे छोटा संभव हो। उदाहरण के लिए, अगर इनपुट 1432219 है और k = 3, तो रिजल्ट 1219 होगा। इसे हल करने के लिए, हम इन स्टेप्स को फॉलो करेंगे: एक स्टैक st डिफाइन करें,

  1. - C++ में चार डिवाइजर्स

    मान लीजिए हमारे पास एक इंटीजर ऐरे nums है, हमें उस ऐरे में उन इंटीजर्स के डिवाइजर्स का योग ढूंढना है जिनके ठीक चार डिवाइजर्स हैं। अगर ऐरे में ऐसा कोई इंटीजर नहीं है, तो 0 लौटाएं। उदाहरण के लिए, अगर इनपुट [21, 4, 7] है, तो आउटपुट 32 होगा, क्योंकि 21 के चार डिवाइजर्स हैं 1, 3, 7, 21, 4 के तीन डिवाइजर