首页 > 代码库 > 洛谷p1981 表达式求值
洛谷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; }
洛谷p1981 表达式求值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。