Cod sursa(job #2354248)

Utilizator AndreiGSGhiurtu Andrei AndreiGS Data 25 februarie 2019 07:56:57
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <cstring>
using namespace std;

ifstream f("evaluare.in");
ofstream g("evaluare.out");

char s[100001];

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

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

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

int main()
{
    f.getline(s, 100001);
    int n=strlen(s);
    g<<rez(0, n-1);
    return 0;
}