Cod sursa(job #2479412)

Utilizator emadinuDinu Ema emadinu Data 23 octombrie 2019 19:50:33
Problema Evaluarea unei expresii Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 5.17 kb
#include <fstream>

using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
char c;
int i,n,k,nr,gasitnr,fp[100001],stiva[100001];
int main()
{

    while(in>>c)
    {
        if(c>='0'&&c<='9')
        {
            gasitnr=1;
            nr=nr*10+(c-48);
        }
        else
            if(gasitnr==1)
            {
                n++;
                fp[n]=nr;
                nr=0;
                gasitnr=0;
            }
        if(c=='(')
        {
            k++;
            stiva[k]=-1;
        }
        else
            if(c=='+'||c=='-')
            {
                if(stiva[k]>=-6&&stiva[k]<=-3)
                {
                    if(stiva[k]==-6)
                    {
                        n++;
                        fp[n]=-6;
                        if(c=='+')
                            stiva[k]=-6;
                        else
                            stiva[k]=-5;
                    }
                    else
                        if(stiva[k]==-5)
                        {
                            n++;
                            fp[n]=-5;
                            if(c=='+')
                                stiva[k]=-6;
                            else
                                stiva[k]=-5;
                        }
                        else
                            if(stiva[k]==-4)
                            {
                                n++;
                                fp[n]=-4;
                                if(c=='+')
                                    stiva[k]=-6;
                                else
                                    stiva[k]=-5;
                            }
                            else
                                if(stiva[k]==-3)
                                {
                                    n++;
                                    fp[n]=-3;
                                    if(c=='+')
                                        stiva[k]=-6;
                                    else
                                        stiva[k]=-5;
                                }
                }
                else
                {
                    k++;
                    if(c=='+')
                        stiva[k]=-6;
                    if(c=='-')
                        stiva[k]=-5;
                    if(c=='*')
                        stiva[k]=-4;
                        if(c=='/')
                        stiva[k]=-3;
                }
            }
            else
                if(c=='*'||c=='/')
                {
                    if(stiva[k]>=-4&&stiva[k]<=-3)
                    {
                        if(stiva[k]==-4)
                        {
                            n++;
                            fp[n]=-4;
                            if(c=='*')
                                stiva[k]=-4;
                            else
                                stiva[k]=-3;
                        }
                        else
                            if(stiva[k]==-3)
                            {
                                n++;
                                fp[n]=-3;
                                if(c=='*')
                                    stiva[k]=-4;
                                else
                                    stiva[k]=-3;
                            }
                    }
                    else
                    {
                        k++;
                        if(c=='+')
                            stiva[k]=-6;
                        if(c=='-')
                            stiva[k]=-5;
                        if(c=='*')
                            stiva[k]=-4;
                        if(c=='/')
                            stiva[k]=-3;
                    }

                }
                else

                    if(c==')')
                    {
                        while(k>0&&stiva[k]!=-1)
                        {
                            n++;
                            fp[n]=stiva[k];
                            k--;
                        }
                        k--;
                    }
    }
    if(gasitnr==1)
    {
        n++;
        fp[n]=nr;
    }
    while(k>0)
    {
        n++;
        fp[n]=stiva[k];
        k--;
    }

    k=0;
    for(i=1;i<=n;i++)
        if(fp[i]<0)
        {
            if(fp[i]==-6)
            {
                stiva[k-1]=stiva[k-1]+stiva[k];
                k--;
            }
            else
                if(fp[i]==-5)
                {
                    stiva[k-1]=stiva[k-1]-stiva[k];
                    k--;
                }
                else
                    if(fp[i]==-4)
                    {
                        stiva[k-1]=stiva[k-1]*stiva[k];
                        k--;
                    }

                    else
                    {
                        stiva[k-1]=stiva[k-1]/stiva[k];
                        k--;
                    }
        }
        else
        {
            k++;
            stiva[k]=fp[i];
        }



    out<<stiva[1];
    return 0;
}