#include <cstdio> #include <iostream> #include <stack> #include <queue> #include <cstring> #include <cmath> using namespace std; const int INF=0x3fffffff; stack<char> st1; stack<int> st2; stack<int> snum; char ss[100]={}; int main(){ gets(ss); int len=strlen(ss); for(int i=0;i<len;i++){ int num=0; if(ss[i]-'0'>=0&&ss[i]-'0'<=9){//是数字 int numsize=0; while(ss[i+numsize]-'0'>=0&&ss[i+numsize]-'0'<=9&&i+numsize<len){ numsize++; } int count=0; for(int j=numsize;j>0;j--){ num+=(int)((ss[i+count]-'0')*pow(10,j-1)); count++; } st2.push(num); i+=numsize-1; } else if(ss[i]=='('){ st2.push(INF); } else if(ss[i]=='+'||ss[i]=='-'||ss[i]=='*'||ss[i]=='/'){ st1.push(ss[i]); } else if(ss[i]==')'){ char app=st1.top(); st1.pop(); while(st2.top()!=INF){ snum.push(st2.top()); st2.pop(); } st2.pop();//把左括号弹出; int sum=snum.top(); snum.pop(); while(!snum.empty()){ if(app=='+'){ sum+=snum.top(); snum.pop(); } else if(app=='-'){ sum-=snum.top(); snum.pop(); } else if(app=='*'){ sum*=snum.top(); snum.pop(); } else if(app=='/'){ sum/=snum.top(); snum.pop(); } } st2.push(sum); } } if(st1.empty()){ cout<<st2.top(); } } |
Double click to view unformatted code.