top1编程
← 返回题目
题解

后缀表达式的值

1 条题解

  • 0
    @ 2026-7-28 22:44:55
    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        stack<long long> st;
        string s;
        // 读取一整行输入,包含所有空格、数字、符号、@
        getline(cin, s);
        long long num = 0;
        int len = s.size();
        for(int i = 0; i < len; i++)
        {
            char ch = s[i];
            if(ch == '@') break; // 读到结束符直接退出循环
            
            if(ch == ' ') // 空格分隔,数字结束,压栈
            {
                if(num != 0)
                {
                    st.push(num);
                    num = 0;
                }
                continue;
            }
            
            // 数字字符,拼接多位数
            if(isdigit(ch))
            {
                num = num * 10 + (ch - '0');
            }
            // 运算符
            else
            {
                // 先把当前未入栈数字压入栈
                if(num != 0)
                {
                    st.push(num);
                    num = 0;
                }
                // 弹出两个操作数(先右后左)
                long long b = st.top(); st.pop();
                long long a = st.top(); st.pop();
                long long res;
                if(ch == '+') res = a + b;
                else if(ch == '-') res = a - b;
                else if(ch == '*') res = a * b;
                else res = a / b;
                st.push(res);
            }
        }
        cout << st.top();
        return 0;
    }
    
    • 1