Cod sursa(job #3182094)

Utilizator MegaCoderMinoiu Teodor Mihai MegaCoder Data 8 decembrie 2023 17:35:22
Problema Evaluarea unei expresii Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include<fstream>
#include<string>
std::ifstream fin("evaluare.in");
std::ofstream fout("evaluare.out");
std::string exp;
long long size;
int findSign(int st, int dr, int s1, int s2)
{
    int nr=0;
    for(int index=dr; index>=st; --index)
    {
        if(exp[index]==')')
            ++nr;
        else if(exp[index]=='(')
            --nr;
        if(!nr && exp[index]==s1 || exp[index]==s2)
            return index;
    }
    return -1;
}
int createNum(int st, int dr)
{
    int ans=0;
    for(int index=st; index<=dr; ++index)
        ans=ans*10+(exp[index]-'0');
    return ans;
}
int solve(int st, int dr)
{
    int local= findSign(st, dr, '+', '-');
    if(local!=-1)
    {
        int e1=solve(st, local-1);
        int e2=solve(local+1, dr);
        if(exp[local]=='+')
            return e1+e2;
        return e1-e2;
    }
    local=findSign(st, dr, '*', '/');
    if(local!=-1)
    {
        int e1=solve(st, local-1);
        int e2=solve(local+1, dr);
        if(exp[local]=='*')
            return e1*e2;
        return e1/e2;
    }
    if(exp[st]=='(' && exp[dr]==')')
        return solve(st+1, dr-1);
    return createNum(st, dr);
}
int main()
{
    fin>>exp;
    size=exp.size();
    fout<<solve(0, size-1);
    return 0;
}