Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- using namespace std;
- void splitString(string s, vector<string>& v) {
- string temp = "";
- for (int i = 0; i < s.length(); ++i) {
- if (s[i] == ' ') {
- v.push_back(temp);
- temp = "";
- }
- else {
- temp.push_back(s[i]);
- }
- }
- v.push_back(temp);
- }
- vector<int> calcRpn(const vector<string>& rpn) {
- string operations = "-+/*";
- vector<int> subArr;
- if (rpn.size() < 1) {
- return vector<int>{1, 1};
- }
- if (rpn.size() == 1) {
- subArr.push_back(stoi(rpn[0]));
- return subArr;
- }
- for (const string& item : rpn) {
- if (operations.find(item) == -1) {
- subArr.push_back(stoi(item));
- }
- else {
- int len = subArr.size();
- if (len <= 1 or item.empty()) {
- return vector<int>{1, 1};
- }
- if (item == "*") {
- subArr[len - 2] = subArr[len - 2] * subArr[len - 1];
- }
- else if (item == "/") {
- if (subArr[len - 1] == 0)
- return vector<int>{1, 1};
- subArr[len - 2] = subArr[len - 2] / subArr[len - 1];
- }
- else if (item == "+") {
- subArr[len - 2] = subArr[len - 2] + subArr[len - 1];
- }
- else if (item == "-") {
- subArr[len - 2] = subArr[len - 2] - subArr[len - 1];
- }
- subArr.pop_back();
- }
- }
- return subArr;
- }
- int main() {
- string toSplit;
- getline(cin, toSplit);
- string ops = "/ * - +";
- if (toSplit.empty() || ops.find(toSplit) != -1) {
- cout << "ERROR";
- return 0;
- }
- vector<string> splittedVec;
- splitString(toSplit, splittedVec);
- vector<int> answ = calcRpn(splittedVec);
- if (answ.size() > 1) {
- cout << "ERROR";
- return 0;
- }
- cout << answ[0];
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement