Cod sursa(job #2245846)

Utilizator alisavaAlin Sava alisava Data 25 septembrie 2018 23:14:49
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char s[100005];
int n;
int Calcul(int &poz)
{

    stack<int>st;
    poz++;
    int total=0,val=0,semn=0,curent=1;
    for(;poz<=n;poz++)
    {
        if(s[poz]=='+')
        {
            curent=1;
            semn=0;
        }
        else if(s[poz]=='-')
        {
            curent=-1;
            semn=0;
        }
        else if(s[poz]=='(')
        {
            val=Calcul(poz);
            if(semn==1) st.top()*=val;
            else if(semn==-1) st.top()/=val;
            else st.push(val*curent);
        }
        else if('0'<=s[poz]&&s[poz]<='9')
        {
            val=0;
            while('0'<=s[poz]&&s[poz]<='9')
            {
                val=val*10+s[poz]-'0';
                poz++;
            }
           if(semn==1) st.top()*=val;
            else if(semn==-1) st.top()/=val;
            else st.push(val*curent);
            poz--;

        }
        else if(s[poz]=='*')
        {
            semn=1;
        }
        else if(s[poz]=='/')
        {
            semn=-1;
        }
        else if(s[poz]==')')
            break;
    }
    while(!st.empty())
    {
         total+=st.top();
         st.pop();
    }
    return total;
}


int main()
{
    int poz=0;
    fin>>(s+1);
    n=strlen(s+1);
    fout<<Calcul(poz);

    return 0;
}