链接:https://ac.nowcoder.com/acm/contest/31546/C 来源:牛客网

给定牛牛一个后缀表达式s,计算它的结果,例如,1+1对应的后缀表达式为1#1#+,‘#’作为操作数的结束符号。 其中,表达式中只含有‘+’、’-‘、’*‘三种运算,不包含除法。 本题保证表达式一定合法,且计算过程和计算结果的绝对值一定不会超过10^{18}10 18

示例1 输入 复制 "1#1#+" 返回值 复制 2

利用stack容器

public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 给定一个后缀表达式,返回它的结果
     * @param str string字符串 
     * @return long长整型
     */
    long long legalExp(string str) {
        // write code here
        stack<long long> v;
        long long ans;
        for(int i=0;i<str.length();i++)
        {   ans=0;
            while(str[i]>='0'&&str[i]<='9')
            {
                ans=ans*10+str[i]-48; i++;
            }
            //v.push(ans);
            //cout<<"ans= "<<ans<<endl;
            if(str[i]=='+')
            {
                long long res = v.top();
                v.pop();
                res+=v.top();
                v.pop();
                v.push(res); continue;
            }
         else if(str[i]=='-')
            {
                long long res = v.top();
                v.pop();
                long long sec = v.top();
                v.pop();
                v.push(sec-res); continue;
            }
          else if(str[i]=='*')
            {
                long long res = v.top();
                v.pop();
                long long sec = v.top();
                v.pop();
                v.push(res*sec); continue;
            }
         v.push(ans);
        }
        return v.top();
        
    }
};