Cod sursa(job #2302853)

Utilizator PandaChanTrusca Daria PandaChan Data 15 decembrie 2018 10:54:24
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char a[100005];
int cautare(int l1, int l2, char s1, char s2)
{
    int contor=0;
    for(int i=l2; i>=l1; i--)
    {
        if(a[i]==')')
            contor++;
        if(a[i]=='(')
            contor--;
        if(contor==0 && (a[i]==s1 || a[i]==s2))
            return i;
    }
    return -1;
}
int numar(int l1, int l2)
{
    int n=0;
    for(int i=l1; i<=l2; i++)
    {
        int c=a[i]-'0';
        n=n*10+c;
    }
    return n;
}
int solve(int l1, int l2)
{
    int rez=cautare(l1, l2, '+', '-');
    if(rez!=-1)
    {
        int e1=solve(l1, rez-1);
        int e2=solve(rez+1, l2);
        if(a[rez]=='+')
            return e1+e2;
        return e1-e2;
    }
    rez=cautare(l1, l2, '*', '/');
    if(rez!=-1)
    {
        int e1=solve(l1, rez-1);
        int e2=solve(rez+1, l2);
        if(a[rez]=='*')
            return e1*e2;
        return e1/e2;
    }
    if(a[l1]=='(' && a[l2]==')')
        return solve(l1+1, l2-1);
    return numar(l1, l2);
}
int main()
{
    f.getline(a, 100005);
    int l=strlen(a);
    g<<solve(0, l-1);
    return 0;
}