此题采用栈的做法,先将字符串全部保存起来,然后逐个遍历,数字保留最后4位,不足4位的有多少位算多少位,用数字栈保存数字,用操作符栈保存操作符,有操作符入栈则先结算数字让数字入栈,然后进行操作符入栈操作,当操作符优先级低于运算符栈顶运算符时,将弹出所有高优先级的运算符并进行相应的运算,将演算结果压入数字栈中,最后计算时逐个弹出运算符栈中的运算符并进行计算,由于采用栈,注意考虑空栈情况,否则会段错误
#include <bits/stdc++.h>
using namespace std;
stack<char> tmp;
stack<int> num;
stack<char> oper;
void getnum()
{
    string tmpstr;
    int size = tmp.size();
    for (int i = 1; i <= (size >= 4 ? 4 : size); i++)
    {
        tmpstr += tmp.top();
        tmp.pop();
    }
    reverse(tmpstr.begin(), tmpstr.end());
    stack<char>().swap(tmp);
    num.push(stoi(tmpstr, 0, 10));
}
int main()
{
    string str;
    cin >> str;
    for (auto ch : str)
    {
        if (ch == '*')
        {
            oper.push('*');
            getnum();
        }
        else if (ch == '+')
        {
            getnum();
            if (oper.size() != 0)
            {
                while (oper.top() == '*')
                {
                    oper.pop();
                    int num1 = num.top();
                    num.pop();
                    int num2 = num.top();
                    num.pop();
                    num.push((num1 % 10000 * num2 % 10000) % 10000);
                    if(oper.size()==0)
                        break;
                }
            }
            oper.push('+');
        }
        else
        {
            tmp.push(ch);
        }
    }
    getnum();
    while (!oper.empty())
    {
        char ch = oper.top();
        oper.pop();
        int num1 = num.top();
        num.pop();
        int num2 = num.top();
        num.pop();
        if (ch == '+')
            num.push((num1 % 10000 + num2 % 10000) % 10000);
        else
            num.push((num1 % 10000 * num2 % 10000) % 10000);
    }
    cout << num.top();
}