洛谷p1981 表达式求值
#include <iostream> #include <cstdio> #include <cstring> using namespace std; char s[100007]; typedef long long ll; ll numSt[100007],opSt[100007],ans[63]; int main(){ while(~scanf("%s",s)){ int numTail=0,opTail=0,len=strlen(s),i,cnt=0; for(i=0;i<len;++i){ if(s[i]=='+'||s[i]=='*'){ if(s[i]=='+') opSt[opTail++]=0; else opSt[opTail++]=1; } else{ ll base=0; while(i<len&&s[i]!='*'&&s[i]!='+'){ base=base*10+(s[i]-'0'); i++; } i--; numSt[numTail++]=base; if(i==len-1||s[i+1]=='+'){ while(numTail&&opTail){ ll a=numSt[--numTail],b=numSt[--numTail]; ll op=opSt[--opTail]; if(op==1){ a*=b; } else{ a+=b; } numSt[numTail++]=a; } } } } while(cnt<4){ ans[++cnt]=numSt[0]%10; numSt[0]/=10; } int base=0; for(i=cnt;i>=1;--i) base=base*10+ans[i]; printf("%d\n",base); } return 0; }