Cod sursa(job #3228666)

Utilizator Shaan_StefanShaan Stefan Shaan_Stefan Data 9 mai 2024 19:50:33
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>

using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

int exprs(int &pos);
int term(int &pos);
int constn(int &pos);

char sir[100010];

int main()
{
    fin>>sir;
    int pos=0;
    fout<<exprs(pos);
    return 0;
}

int exprs(int &pos)
{
    int vp=term(pos);
    char op;
    //fout<<vp<<'\n';
    while(sir[pos]=='+' || sir[pos]=='-')
    {
        //fout<<vp<<'\n';
        op=sir[pos];
        pos++;
        vp=vp+(op=='+' ? term(pos) : -term(pos));
    }
    return vp;
}

int term(int &pos)
{
    int vp=0, tmv=0;
    char op;
    if(sir[pos]=='(')
    {
        pos++;
        vp=exprs(pos);
        pos++;
    }
    else
        vp=constn(pos);

    while(sir[pos]=='*' || sir[pos]=='/')
    {
        op=sir[pos];
        pos++;
        if(sir[pos]=='(')
        {
            pos++;
            tmv=exprs(pos);
            pos++;
        }
        else
            tmv=constn(pos);

        if(op=='*')
            vp*=tmv;
        else
            vp/=tmv;
    }
    return vp;
}

int constn(int &pos)
{
    int nr=0;
    while(isdigit(sir[pos]))
        nr=nr*10+sir[pos]-'0', pos++;
    return nr;
}