Cod sursa(job #1452053)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 19 iunie 2015 17:11:25
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#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;
}