Cod sursa(job #2659247)

Utilizator NastureNasture Anca Nasture Data 16 octombrie 2020 11:58:11
Problema Evaluarea unei expresii Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 3.07 kb
#include <fstream>
#include<cstring>

using namespace std;

ifstream cin("evaluare.in");
ofstream cout("evaluare.out");


char s[100001];
int st[100001], rez[100001];


int main()
{
    int i,n,k,nr,nr1;
    cin>>s;
    n=strlen(s);
    k=0;
    nr=0;
    for(i=0;i<n;i++)
        if(s[i]=='(')
        {
            k++;
            st[k]=-1;
        }
        else
            if(s[i]=='+')
            {
                while(st[k]==-4 || st[k]==-5 && k>0)
                {
                    nr++;
                    rez[nr]=st[k];
                    k--;
                }
                k++;
                st[k]=-2;
            }
            else
                if(s[i]=='-')
                {
                    while(st[k]==-4 || st[k]==-5 && k>0)
                    {
                        nr++;
                        rez[nr]=st[k];
                        k--;
                    }
                    k++;
                    st[k]=-3;
                }
                else
                    if(s[i]==')')
                    {
                        while(st[k]!=-1 && k>0)
                        {
                            nr++;
                            rez[nr]=st[k];
                            k--;
                        }
                        k--;
                    }
                    else
                        if(s[i]=='*')
                        {
                            k++;
                            st[k]=-4;
                        }
                        else
                            if(s[i]=='/')
                            {
                                k++;
                                st[k]=-5;
                            }
                            else
                            {
                                nr1=0;
                                while(s[i]>='0' && s[i]<='9'&& i<n)
                                {
                                    nr1=nr1*10+(s[i]-'0');
                                    i++;
                                }
                                nr++;
                                rez[nr]=nr1;
                                i--;
                            }


    while(k>0)
    {
        nr++;
        rez[nr]=st[k];
        k--;
    }
    k=0;
    for(i=1;i<=nr;i++)
        if(rez[i]>=0)
        {
            k++;
            st[k]=rez[i];
        }
        else
            if(rez[i]==-2)
            {
                st[k-1]+=st[k];
                k--;
            }
            else
                if(rez[i]==-3)
                {
                    st[k-1]-=st[k];
                    k--;
                }
                else
                    if(rez[i]==-4)
                    {
                        st[k-1]*=st[k];
                        k--;
                    }
                    else
                    {
                        st[k-1]/=st[k];
                        k--;
                    }

           cout<<st[1];


    return 0;
}