开了两个栈 10分wa求调 必回关注
查看原帖
开了两个栈 10分wa求调 必回关注
1021623
AVLw楼主2023/12/13 15:57

样例都通过了 不知道哪里错了 一个栈放数字一个栈放符号 必回关注

#include <iostream>
#include <cstdio>
#include <stack>
#include <cctype>

using namespace std;

stack<int> num;  // 数字栈
stack<char> ops; // 符号栈

int main()
{
    string s;
    cin >> s;
    s+="+";  //补个加号处理最后一个数字
    int cur = 0;
    for (size_t i = 0; i < s.size(); i++)
    {
        if (isdigit(s[i]))
        {
            cur = cur * 10 + s[i] - '0';
        }
        else
        {
            if (!ops.empty() && ops.top() == '*')
            { // 如果是乘号 弹出 计算后 再压入num栈
                ops.pop();
                int t = num.top() * cur;
                num.pop();
                num.push(t);
                ops.push('+');
            }
            else
            { // 加号直接压入
                num.push(cur);
                ops.push(s[i]);
            }
            cur = 0;
        }
    }
    int res = 0;
    while (!num.empty())
    {
        res += num.top();
        num.pop();
    }
    cout << res % 10000;

    return 0;
}
2023/12/13 15:57
加载中...