Cod sursa(job #2237826)

Utilizator ivddabDabelea Ioana-Viviana ivddab Data 3 septembrie 2018 12:41:57
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <cstring>
#include <fstream>

#define ifnt else

using namespace std;

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

char s[100041];
int n;

int f(char s[], int st, int dr)
{
    int depth = 0;
    for(int i = dr; i >= st; i--)
    {
        if(s[i] == '+' && depth == 0)
        {
            return f(s, st, i-1) + f(s, i+1, dr);
        }
        ifnt if(s[i] == '-' && depth == 0)
            return f(s, st, i-1) - f(s, i+1, dr);
        ifnt if(s[i] == ')')
            depth++;
        ifnt if(s[i] == '(')
            depth--;
    }
    for(int i = dr; i >= st; i--)
    {
        if(s[i] == '*' && depth == 0)
        {
            return f(s, st, i-1) * f(s, i+1, dr);
        }
        ifnt if(s[i] == '/' && depth == 0)
            return f(s, st, i-1) / f(s, i+1, dr);
        ifnt if(s[i] == ')')
            depth++;
        ifnt if(s[i] == '(')
            depth--;
    }
    if(s[st] == '(' && s[dr] == ')')
        return f(s, st+1, dr-1);
    ifnt{
    int r = 0;
    while(st <= dr)
    {
        if(s[st] >= '0' && s[st] <= '9')
        r = r*10 + (s[st]-'0');
        st++;
    }
    return r;
    }
}

int main()
{

    fin.getline(s, 100041);
    n = strlen(s);
    int rez = f(s, 0, n-1);
    fout << rez;
    return 0;
}