Cod sursa(job #3151612)

Utilizator BOSSSTEFANPetrescu Ioan Stefan BOSSSTEFAN Data 22 septembrie 2023 02:14:06
Problema Evaluarea unei expresii Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.22 kb
#include <fstream>
#include <bitset>
#include <cstring>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
int st[100001];
char sir[100001];
int main()
{
    cin>>sir;
    int i,k=0,n=strlen(sir),nr=0,ok=0;
    for(i=0;i<n;i++)
    {
        if(sir[i]>='0'&&sir[i]<='9')
        {
            nr=nr*10+sir[i]-'0';
            ok=1;
        }
        else
        {
            if(ok==1)
            {
                if(st[k]==3)
                {
                    k--;
                    st[k]*=nr;
                }
                else
                if(st[k]==4)
                {
                    k--;
                    st[k]/=nr;
                }
                else
                    st[++k]=nr;
                nr=0;
                ok=0;
            }
            if(sir[i]=='+')
                st[++k]=1;
            else
            if(sir[i]=='-')
                st[++k]=2;
            else
            if(sir[i]=='*')
                st[++k]=3;
            else
            if(sir[i]=='/')
                st[++k]=4;
            else
            if(sir[i]=='(')
                st[++k]=5;
            else
            {
                nr=0;
                while(st[k-1]!=5)
                {
                    if(st[k-1]==1)
                        nr+=st[k];
                    else
                        nr-=st[k];
                    k-=2;
                }
                nr+=st[k];
                k-=2;
                if(st[k]==3)
                    st[--k]=st[k]*nr;
                else
                if(st[k]==4)
                    st[--k]=st[k]/nr;
                else
                    st[++k]=nr;
                nr=0;
            }
        }
    }
    if(ok==1)
    {
        if(st[k]==3)
        {
            k--;
            st[k]*=nr;
        }
        else
        if(st[k]==4)
        {
            k--;
            st[k]/=nr;
        }
        else
            st[++k]=nr;
        nr=0;
        ok=0;
    }
    nr=st[1];
    while(k>1)
    {
        if(st[k-1]==1)
            nr+=st[k];
        else
            nr-=st[k];
        k-=2;
    }
    cout<<nr;
    return 0;
}