追星者
子供のころにもう一度上映したら、私たちは必ず先に笑って、そして声をあげて泣いて、最後に涙を流して、微笑んで寝ます。

输入一个逆波兰式字符串,只含有0-9组成的运算数,“+”,“-”,“*”,“/” 四种运算符,两个运算数之间存在空格,不需要考虑分母为0以及不整除的情况,输入以“#”结束。

Input

一行,逆波兰式字符串

Output

一行,逆波兰式的值

Sample

input

11 2 3 + 4 *-#

output

-9

Note

样例中生成的求值表达式为"11-(2+3)*4 = -9"。

#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main(void) {
    string s;
    getline(cin, s);
    stack<int> sta;
    int left = 0;
    int right = 0;
    for (int i = 0; i < s.size(); i++) {
        if (s[i] >= '0' && s[i] <= '9') {
            string s2 = "";
            while (s[i] >= '0' && s[i] <= '9') {
                s2 += s[i];
                i++;
            }
            sta.push(stoi(s2));
        }
        else if (s[i] != ' ' and s[i]!='#') {
            if (!sta.empty()) {
                right = sta.top();
                sta.pop();
            }
            if (!sta.empty()) {
                left = sta.top();
                sta.pop();
            }
            switch (s[i]) {
            case '+':
                sta.push(left + right);
                break;
            case '-':
                sta.push(left - right);
                break;
            case '*':
                sta.push(left * right);
                break;
            case '/':
                sta.push(left / right);
                break;
            default:
                break;
            }
        }
    }
    cout << sta.top() << endl;
    return 0;
}

posted on 2021-11-17 16:28  Star_chaser  阅读(101)  评论(0)    收藏  举报