Cod sursa(job #2734453)

Utilizator enedumitruene dumitru enedumitru Data 31 martie 2021 21:58:40
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <fstream>
using namespace std;
ifstream f("evaluare.in"); ofstream g("evaluare.out");
char s[100001],st1[100001];
int nr,k1,rez,k2,st2[100001],pr[300];
int operatie(int a, int b, char sgn)
{   if(sgn == '+') return a + b;
    if(sgn == '*') return a * b;
    if(sgn == '/') return a / b;
    if(sgn == '-') return a - b;
    return 0;
}
int main()
{   f>>s;
    pr['(']=pr[')']=0;
    pr['+']=pr['-']=1;
    pr['*']=pr['/']=2;
    for(int i=0;s[i]!=0;i++)
    {   if('0'<=s[i] && s[i]<='9')
        {   nr=0;
            while('0'<=s[i] && s[i]<='9') {nr=nr*10+s[i]-'0'; i++;}
            i--;
            st2[++k2]=nr;
        }
        else if(s[i] == '(') st1[++k1] = '(';
            else if(s[i]==')')
                {   while(st1[k1]!= '(')
                    {   rez=operatie(st2[k2-1],st2[k2],st1[k1]);
                        k1--; k2--;
                        st2[k2] = rez;
                    }
                    k1--;
                }
                else
                {   while(k1 && pr[st1[k1]]>=pr[s[i]])
                    {   rez=operatie(st2[k2-1],st2[k2],st1[k1]);
                        k1--; k2--;
                        st2[k2]=rez;
                    }
                    st1[++k1] = s[i];
                }
    }
    while(k1)
    {   rez=operatie(st2[k2-1],st2[k2],st1[k1]);
        k1--; k2--;
        st2[k2]=rez;
    }
    g<<st2[1]; g.close(); f.close(); return 0;
}