思路如下:
设表达式F,则:
F=T+|T*,
F=F//它本身
//P1981 [NOIP2013 普及组] 表达式求值
#include <bits/stdc++.h>
using namespace std;
int _int[100005];
int linn = 0;
char _exp[100005];
int expn;
int fn=-1,nw;
int ret;
long long f()
{
int now = _int[nw];
nw++;
fn++;
if(_exp[fn]=='+')
{
if(fn-1>=0&&_exp[fn-1]=='*')
{
return now;nw-=1;
}
return (now + f())%10000;
}
else if(_exp[fn]=='*')
{
return (now * f())%10000;
}
else return now;
}
char in[100005];
int main()
{
//F -> T + | T *
scanf("%s",in);char num[100005];
int nn = 0;
for(int i=0;i<=strlen(in);i++)
{//初始处理
if(in[i]>='0'&&in[i]<='9')
{
num[nn]=in[i];
nn++;
}
else
{
sscanf(num,"%d",&_int[linn]);
_int[linn]%=10000;
linn++;
memset(num,0,sizeof(num));
nn = 0;
_exp[expn]=in[i];
expn++;
}
}
int ans = 0;
while(nw<=linn)//么有这个不行
{
ans += f();ans%=10000;
}
cout<<ans;
return 0;
}