Cod sursa(job #3293802)

Utilizator Floroiu_MariusFloroiu Marius Cristian Floroiu_Marius Data 12 aprilie 2025 17:01:32
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
string s;
int st[100003];
int vf;
int op1=1e9+1,op2=1e9+2,op3=1e9+3,op4=1e9+4;
int rez;
int main()
{
    fin>>s;
    for (int i=0;i<s.size();i++)
    {
        if (isdigit(s[i]))
        {
            int nr=0;
            while (i<s.size() && isdigit(s[i])) nr=nr*10+(s[i]-'0'),i++;
            i--;
            if (vf==0) st[++vf]=nr;
            else if (st[vf]==op1) st[vf]=-nr;
            else if (st[vf]==op2) vf--,st[vf]*=nr;
            else if (st[vf]==op3) vf--,st[vf]/=nr;
            else st[++vf]=nr;
        }
        else if (s[i]=='-') st[++vf]=op1;
        else if (s[i]=='*') st[++vf]=op2;
        else if (s[i]=='/') st[++vf]=op3;
        else if (s[i]=='(') st[++vf]=op4;
        else if (s[i]==')')
        {
            int nr=0;
            while (st[vf]!=op4) nr+=st[vf],vf--;
            vf--;
            if (vf==0) st[++vf]=nr;
            else if (st[vf]==op1) st[vf]=-nr;
            else if (st[vf]==op2) vf--,st[vf]*=nr;
            else if (st[vf]==op3) vf--,st[vf]/=nr;
            else st[++vf]=nr;
        }
    }
    for (int i=1;i<=vf;i++)
        rez=rez+st[i];
    fout<<rez;
    return 0;
}