Cod sursa(job #2109861)

Utilizator elenaisaiaElena Isaia elenaisaia Data 20 ianuarie 2018 10:52:53
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <iostream>
#include <cstring>
#include <fstream>

using namespace std;

char s[100005];
long long n,nr;

long long fct(long long st,long long dr)
{
    long long semn=-1;
    char x;
    for(long long i=dr;i>=st;--i)
        if((s[i]=='+'||s[i]=='-')&&nr==0)
        {
            semn=i;
            x=s[i];
            break;
        }
        else
            if(s[i]==')')
                nr++;
            else
                if(s[i]=='(')
                   nr--;
    if(semn!=-1)
    {
        if(x=='-')
            return fct(st,semn-1)-fct(semn+1,dr);
        else
            return fct(st,semn-1)+fct(semn+1,dr);
    }
    semn=-1;
    nr=0;
    for(long long i=dr;i>=st;--i)
        if((s[i]=='*'||s[i]=='/')&&nr==0)
        {
            semn=i;
            x=s[i];
            break;
        }
        else
            if(s[i]==')')
                nr++;
            else
                if(s[i]=='(')
                   nr--;
    if(semn!=-1)
    {
        if(x=='/')
            return fct(st,semn-1)/fct(semn+1,dr);
        else
            return fct(st,semn-1)*fct(semn+1,dr);
    }
    if(s[st]=='('&&s[dr]==')')
        return fct(st+1,dr-1);
    long long numar=0;
    for(long long i=st;i<=dr;++i)
    {
        long long cifra=s[i]-'0';
        numar=numar*10+cifra;
    }
    return numar;
}

int main()
{
    ifstream fin("evaluare.in");
    fin>>s;
    n=strlen(s);
    ofstream fout("evaluare.out");
    fout<<fct(0,n-1);
    return 0;
}