Cod sursa(job #2310768)

Utilizator stefan1anubystefan popa stefan1anuby Data 1 ianuarie 2019 23:59:46
Problema Evaluarea unei expresii Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.13 kb
#include <fstream>

using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
/// -1 == '(' , -2 ==')' , -3 == + ,-4== - ,-5 == * , -6 == /
int v[100005],cnt,st[100005],a;
void read()
{
    char ch;
    v[0]=-1;
    while(cin>>ch)
    {
        if(ch=='(')
            v[++cnt]=-1;
        else if(ch==')')
            v[++cnt]=-2;
        else if(ch=='+')
            v[++cnt]=-3;
        else if(ch=='-')
            v[++cnt]=-4;
        else if(ch=='*')
            v[++cnt]=-5;
        else if(ch=='/')
            v[++cnt]=-6;
        else if(ch<='9' && ch>='0')
        {
            if(v[cnt]<0)
                cnt++;
            v[cnt]=v[cnt]*10+(ch-'0');
        }
    }
    v[++cnt]=-2;
}
void afis()
{
    int i;
    for(i=0; i<=cnt; i++)
        cout<<v[i]<<" ";
}
void solve()
{
    int i,rez=0,a=0,b,c;
    for(i=0; i<=cnt; i++)
    {
        st[a]=v[i];
        if(st[a]>=0 && st[a-2]>=0)
        {
            if(st[a-1]==-5)
            {
                st[a-2]*=st[a];
                a-=2;
            }
            else if(st[a-1]==-6)
            {
                st[a-2]/=st[a];
                a-=2;
            }
        }
        else if(st[a]==-2)
        {
            a--;
            b=a;
            while(st[b]!=-1)
            {
                b--;
            }
            c=b;
            b++;
            rez=st[b];
            b+=2;
            for(b; b<=a; b+=2)
            {
                if(st[b-1]==-3)
                    rez+=st[b];
                else if(st[b-1]==-4)
                    rez-=st[b];
            }
            st[c]=rez;
            a=c;
            if(st[a]>=0 && st[a-2]>=0)
            {
                if(st[a-1]==-5)
                {
                    st[a-2]*=st[a];
                    a-=2;
                }
                else if(st[a-1]==-6)
                {
                    st[a-2]/=st[a];
                    a-=2;
                }
            }
        }
        a++;
    }
    cout<<st[0];
}
int main()
{
    read();
    //afis();
    solve();
    return 0;
}