比赛 |
板子大赛 |
评测结果 |
AAAAAAAAEE |
题目名称 |
表达式求值 |
最终得分 |
80 |
用户昵称 |
喵喵喵 |
运行时间 |
0.517 s |
代码语言 |
C++ |
内存使用 |
3.38 MiB |
提交时间 |
2025-01-22 09:30:19 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
char s[1000005];
stack<long long int> s1;
stack<char> s2;
int num = 0;
int val(char c)
{
if(c == '+')
{
return 1;
}
else if(c == '-')
{
return 1;
}
else if(c == '*')
{
return 2;
}
else if(c == '/')
{
return 2;
}
else if(c == '^')
{
return 3;
}
else if(c == '(')
{
return 0;
}
else if(c == ')')
{
return 0;
}
}
void cal()
{
int b = s1.top();
s1.pop();
int a = s1.top();
s1.pop();
char op = s2.top();
s2.pop();
if(op == '+')
{
s1.push(a+b%10000);
}
else if(op == '*')
{
s1.push(a*b%10000);
}
}
int main()
{
freopen("expr2013.in","r",stdin);
freopen("expr2013.out","w",stdout);
cin >> s;
int n = strlen(s);
s[n] = '(';
s[n+1] = ')';
for(int i = 0;i < n+2;i++)
{
if(s[i] >= '0' && s[i] <= '9')
{
num = num * 10 + (s[i] - '0');
}
else if(s[i] == '+')
{
if(num)
{
s1.push(num);
num = 0;
}
while(!s2.empty() && val(s2.top()) >= val('+'))
{
cal();
}
s2.push('+');
}
else if(s[i] == '-')
{
if(num)
{
s1.push(num);
num = 0;
}
while(!s2.empty() && val(s2.top()) >= val('-'))
{
cal();
}
s2.push('-');
}
else if(s[i] == '*')
{
if(num)
{
s1.push(num);
num = 0;
}
while(!s2.empty() && val(s2.top()) >= val('*'))
{
cal();
}
s2.push('*');
}
else if(s[i] == '/')
{
if(num)
{
s1.push(num);
num = 0;
}
while(!s2.empty() && val(s2.top()) >= val('/'))
{
cal();
}
s2.push('/');
}
else if(s[i] == '^')
{
if(num)
{
s1.push(num);
num = 0;
}
while(!s2.empty() && val(s2.top()) >= val('^'))
{
cal();
}
s2.push('^');
}
else if(s[i] == '(')
{
if(num)
{
s1.push(num);
num = 0;
}
s2.push('(');
}
else if(s[i] == ')')
{
if(num)
{
s1.push(num);
num = 0;
}
while(!s2.empty() && s2.top() != '(')
{
cal();
}
s2.pop();
}
}
while(!s2.empty())
{
cal();
}
cout << s1.top() % 10000 <<endl;
return 0;
}