Cod sursa(job #2289986)

Utilizator ptudortudor P ptudor Data 25 noiembrie 2018 16:47:12
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.94 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
char c[100005];
const long long A=1000000005,PLUS=1000000006,MINUS=1000000007,ORI=1000000008,CAT=1000000009;
stack <long long> q;
int main()
{int i,nr=0;
    char semn='+';
    in.getline(c,100002);
    q.push(A);
    for (i=0;c[i];)
    {
        if (c[i]=='('){q.push(A);i++;}
        else if (c[i]=='+'){q.push(PLUS);i++;}
        else if (c[i]=='-'){q.push(MINUS);i++;}
        else if(c[i]=='*'){q.push(ORI);i++;}
        else if (c[i]=='/'){q.push(CAT);i++;}
        else if (c[i]>='0'&&c[i]<='9')
        {
            nr=0;
            while (c[i]>='0'&&c[i]<='9')
            {
                nr=nr*10+c[i]-'0';
                i++;
            }
            if (q.top()==PLUS)
                {q.pop();q.push(nr);}
            else if (q.top()==MINUS)
            {q.pop();q.push(-1*nr);}
            else if (q.top()==ORI)
            {q.pop();nr=q.top()*nr;q.pop();q.push(nr);}
            else if(q.top()==CAT)
            {q.pop();nr=q.top()/nr;q.pop();q.push(nr);}
            else if (q.top()==A)
            {q.push(nr);}
        }
        else if(c[i]==')')
        {
            nr=0;
            while (!(q.top()==A))
            {
                nr+=q.top();
                q.pop();
            }
            q.pop();
            if (q.top()==PLUS)
                {q.pop();q.push(nr);}
            else if (q.top()==MINUS)
            {q.pop();q.push(-1*nr);}
            else if (q.top()==ORI)
            {q.pop();nr=q.top()*nr;q.pop();q.push(nr);}
            else if(q.top()==CAT)
            {q.pop();nr=q.top()/nr;q.pop();q.push(nr);}
            else if (q.top()==A)
            {q.push(nr);}
            i++;
        }
    }
    nr=0;
    while (!(q.top()==A))
    {
        nr+=q.top();
        q.pop();
    }
    out<<nr<<"\n";
    out.close();
    in.close();
    return 0;
}