Cod sursa(job #2090212)

Utilizator gufet24Stan Stefan gufet24 Data 17 decembrie 2017 19:35:19
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include<fstream>
#include<stack>
#include<cstring>
#include<vector>

using namespace std;

const int NMAX=100001;

ifstream f("evaluare.in");
ofstream g("evaluare.out");

char s[NMAX];

int poz[NMAX];

stack<int> St;

int Solutie(const int st,const int dr)
{
    vector < int > v;
    int semn = 1, sol = 0,x = 0;
    for(int i=st;i<=dr;++i)
    {
        if(s[i] == '(')
        {
            x = Solutie(i+1,poz[i]-1);
            i = poz[i];
            continue;
        }
        if('0'<= s[i] && s[i]<='9')
        {
            x=x*10+s[i]-'0';
            continue;
        }
        if(semn == 0)
            v.back()*=x;
        else
            if(semn == -2)
                v.back()/=x;
        else
            v.push_back(x*semn);
        if(s[i]=='*')
            semn = 0;
        else
        if(s[i] == '/')
            semn = -2;
        else
        {
            semn = 1;
            if(s[i] =='-')
                semn  = -1;
        }

        x = 0;
    }
    if(semn == 0)
        v.back()*=x;
    else
        if(semn == -2)
            v.back()/=x;
    else
        v.push_back(x*semn);
    sol = 0;
    for(int i=0;i<v.size();++i)
        sol += v[i];
    return sol;
}
int main()
{
    f>>(s+1);
    int n=strlen(s+1);
    for(int i=1;i<=n;i++)
        if(s[i]=='(')
            St.push(i);
        else
            if(s[i]==')')
            {
                poz[St.top()]=i;
                St.pop();
            }
    g<<Solutie(1,n)<<"\n";
    return 0;
}