Pagini recente » Cod sursa (job #1056944) | Cod sursa (job #3040990) | Rating Adina Radu (ayna) | Istoria paginii planificare/sedinta-20080411 | Cod sursa (job #1452053)
#include <cctype>
#include <fstream>
#include <stack>
#include <string>
using namespace std;
ifstream finn("evaluare.in");
ofstream jake("evaluare.out");
stack<char> op;
stack<int> pol;
inline void add(void){
int t=pol.top();
if(op.top()=='+'){
pol.pop();
pol.top()+=t;
}
else if(op.top()=='-'){
pol.pop();
pol.top()-=t;
}
else if(op.top()=='*'){
pol.pop();
pol.top()*=t;
}
else if(op.top()=='/'){
pol.pop();
pol.top()/=t;
}
op.pop();
}
inline int opp(char ch){
if(ch==')')
return 2;
if(ch=='+')
return 0;
if(ch=='-')
return 0;
return 1;
}
int main(void){
int n;
string in;
getline(finn,in);
for(int i=0;i<in.size();++i){
n=0;
if(isdigit(in[i])){
while(isdigit(in[i])){
n=n*10+in[i]-'0';
++i;
}
pol.push(n);
--i;
continue;
}
if(in[i]=='('){
op.push('(');
}
else if(in[i]==')'){
while(op.top()!='(')
add();
op.pop();
}
else{
while(!op.empty() and op.top()!='(' and opp(in[i])<=opp(op.top()))
add();
op.push(in[i]);
}
}
while(!op.empty())
add();
jake<<pol.top();
return 0;
}