Cod sursa(job #2481111)

Utilizator mihitudorMihalcea Tudor mihitudor Data 26 octombrie 2019 14:08:47
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.7 kb
/*
( --> -1
+ --> -3
- --> -4
* --> -5
/ --> -6
*/
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
char vc[100005];
int v[100005], st[100005];
int main()
{
    int n, i, nr, cnt=0, k=0, ok=0;
    fin>>vc+1;
    n=strlen(vc+1);
    i=1;
    while (i<=n)
    {
        if (vc[i]>='0'&&vc[i]<='9')
        {
            nr=0;
            while (vc[i]>='0'&&vc[i]<='9')
            {
                nr=nr*10+vc[i]-'0';
                i++;
            }
            v[++cnt]=nr;
            i--;
        }
        else
        {
            if (vc[i]=='(')
                st[++k]=-1;
            else
            if (vc[i]==')')
            {
                while (st[k]!=-1)
                {
                    v[++cnt]=st[k];
                    k--;
                }
                k--;
            }
            else
            if (vc[i]=='+')
            {
                while (st[k]!=-1&&k)
                {
                    v[++cnt]=st[k];
                    k--;
                }
                st[++k]=-3;
            }
            else
            if (vc[i]=='-')
            {
                while (st[k]!=-1&&k)
                {
                    v[++cnt]=st[k];
                    k--;
                }
                st[++k]=-4;
            }
            else
            if (vc[i]=='*')
            {
                while (st[k]==-5||st[k]==-6)
                {
                    v[++cnt]=st[k];
                    k--;
                }
                st[++k]=-5;
            }
            else
            {
                while (st[k]==-5||st[k]==-6)
                {
                    v[++cnt]=st[k];
                    k--;
                }
                st[++k]=-6;
            }
        }
        i++;
    }
    while (k)
    {
        v[++cnt]=st[k];
        k--;
    }
    for (i=1;i<=cnt;i++)
    {
        if (v[i]>=0)
            st[++k]=v[i];
        else
        {
            if (v[i]==-5)
            {
                if (k<=1)
                    st[k]=0;
                else
                {
                    k--;
                    st[k]=st[k]*st[k+1];
                }
            }
            else
            if (v[i]==-6)
            {
                k--;
                st[k]/=(st[k+1]);
            }
            else
            if (v[i]==-3)
            {
                k--;
                st[k]+=st[k+1];
            }
            else
            {
                k--;
                st[k]-=st[k+1];
            }
        }
    }
    fout<<st[1];
    return 0;
}