#include<iostream> #include<stack> using namespace std; int cal(stack<int>n2,char op){ while(n2.size()!=1){ int left=n2.top(); n2.pop(); int right=n2.top(); n2.pop(); switch(op){ case'+': n2.push(left+right); break; case'-': n2.push(left-right); break; case'*': n2.push(left*right); break; case'/': n2.push(left/right); } } return n2.top(); } int main(){ string s; while(getline(cin,s)){ stack<char>n; stack<char>o; string num=""; for(int i=0;i<s.length();i++){ if(s[i]=='('){ n.push(s[i]); } else if(s[i]>='0' && s[i]<='9'){ num.push_back(s[i]); } else if(s[i]=='+' || s[i]== '*' || s[i]=='-' || s[i]=='/'){ o.push(s[i]); } else if(s[i]==' '){ if(num!=""){ n.push(stoi(num)); num=""; } } else{ if(num!=""){ n.push(stoi(num)); num=""; } char op=o.top(); o.pop(); stack<int>n1; while(n.top()!='('){ n1.push(n.top()); n.pop(); } n.pop(); int res=cal(n1,op); n.push(res); } } printf("%d\n",n.top()); } } |
Double click to view unformatted code.