Cod sursa(job #2350144)

Utilizator Mirela_MagdalenaCatrina Mirela Mirela_Magdalena Data 21 februarie 2019 09:13:24
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

char s[100005];

int cautsemn(int st, int dr, char s1, char s2)
{
    int nr=0;
    for(int i=dr; i>=st; i--)
    {
        if(s[i] == ')')
            nr++;
        if(s[i] == '(')
            nr--;
        if(nr==0 && (s1 == s[i]||s2 == s[i]))
            return i;
    }
    return -1;
}

int num(int st, int dr)
{
    int nr=0;
    for(int i=st; i<=dr; i++)
        nr = nr*10+(s[i]-'0');
    return nr;
}

int solve(int st, int dr)
{
    int poz = cautsemn(st, dr, '+', '-');
    if(poz != -1)
    {
        int e1 = solve(st, poz-1);
        int e2 = solve(poz+1, dr);
        if(s[poz] == '+')
            return e1+e2;
        return e1-e2;
    }
    poz = cautsemn(st, dr, '*', '/');
    if(poz != -1)
    {
        int e1 = solve(st, poz-1);
        int e2 = solve(poz+1, dr);
        if(s[poz] == '*')
            return e1*e2;
        return e1/e2;
    }
    if(s[st] == '(' && s[dr] == ')')
        return solve(st+1, dr-1);
    return num(st, dr);
}

int main()
{
    ifstream fin("evaluare.in");
    fin.getline(s, 100005);
    int n = strlen(s);
    cout<<solve(0, n-1);
    return 0;
}