Cod sursa(job #2941862)

Utilizator Cazacu2006RazvanRazvan Cazacu Cazacu2006Razvan Data 18 noiembrie 2022 14:36:01
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.75 kb
#include <fstream>

using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char x[100001],s2[100001],prior[256];
int s1[100001],k1,k2;

int evaluare(int a,int b,char op)
{
    if(op=='+')
        return a+b;
    else if(op=='-')
        return a-b;
    else if(op=='*')
        return a*b;
    else
        return a/b;
}
int main()
{
    prior['(']=0;
    prior['+']=prior['-']=1;
    prior['*']=prior['/']=2;
    fin>>(x+1);
    for(int i=1;x[i]!='\0';i++)
    {
        if(x[i]=='(')
        {
            k2++;
            s2[k2]=x[i];

        }
        else if(x[i]==')')
        {
            while(s2[k2]!='(')
            {
                char op=s2[k2];
                int a=s1[k1-1],b=s1[k1];
                int rez=evaluare(a,b,op);
                s1[k1-1]=rez;
                k2--;
                k1--;
            }
            k2--;
        }
        else if(x[i]>='0' && x[i]<='9')
        {
           int nr=0;
            while(x[i]>='0' && x[i]<='9')
            {
                nr=nr*10+x[i]-'0';
                i++;
            }
            i--;
            k1++;
            s1[k1]=nr;

        }
        else
        {
            while(k2>0 && prior[x[i]]<=prior[s2[k2]])
            {
                char op=s2[k2];
                int a=s1[k1-1],b=s1[k1];
                int rez=evaluare(a,b,op);
                s1[k1-1]=rez;
                k2--;
                k1--;

            }
            s2[++k2]=x[i];
        }
    }
    while(k2>0)
    {
        char op=s2[k2];
        int a=s1[k1-1],b=s1[k1];
        int rez=evaluare(a,b,op);
        s1[k1-1]=rez;
        k2--;
        k1--;

    }

    fout<<s1[k1];

    return 0;
}