class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 给定一个后缀表达式,返回它的结果
     * @param str string字符串 
     * @return long长整型
     */
    long long legalExp(string str) {
        stack<long long>st;
    for (int i = 0; i < str.size();) {
        if (str[i] == '#') i++;
        else if (str[i] == '+') {
            long long num1 = st.top();
            st.pop();
            long long num2 = st.top();
            st.pop();
            st.push(num1 + num2);
            i++;
        }
        else if (str[i] == '*') {
            long long num1 = st.top();
            st.pop();
            long long num2 = st.top();
            st.pop();
            st.push(num1 * num2);
            i++;
        }
        else if (str[i] == '-') {
            long long num1 = st.top();
            st.pop();
            long long num2 = st.top();
            st.pop();
            st.push(num2 - num1);
            i++;
        }
        else {
            int l = i;
            long long num = 0;
            while (str[l]!='#') {
                num = num * 10 + str[l] - '0';
                l++;
            }
            i += l-i+1;
            st.push(num);
        }

    }
        return st.top();
    }
};