AcWing 454. 表达式求值
原题链接
中等
作者:
哈哈哈hh
,
2020-06-28 08:55:18
,
所有人可见
,
阅读 605
经典栈 这个还比较好只有 + 和 *
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int n = 0;
int main()
{
string str;
cin >> str;
stack<int> s;
stack<char> op;
for(int i = 0; i < str.size(); i++)
{
if(str[i] >= '0' && str[i] <= '9')
{
int num = 0;
while(i < str.size()&& str[i] >= '0' && str[i] <= '9')
{
num = num* 10 + str[i] - '0';
i++;
}
i -= 1;
if(!op.empty() && op.top() == '*')
{
num = (num%10000 * s.top()) % 10000;
op.pop();
s.pop();
s.push(num);
}
else
s.push(num%10000);
}
else if(str[i] == '+')
{
op.push('+');
}
else if(str[i] == '*')
{
op.push('*');
}
}
while(!op.empty())
{
int a = s.top();
s.pop();
op.pop();
int b = s.top();
s.pop();
a = (a + b) % 10000;
s.push(a);
}
cout << s.top() <<endl;
}