Cod sursa(job #2823527)

Utilizator RazvanPanaiteRazvan Panaite RazvanPanaite Data 28 decembrie 2021 19:00:57
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <bits/stdc++.h>

using namespace std;

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

const int DMAX = 1e6+10;

struct arbore{
    int val;
    char op;
    arbore *st,*dr;
}*start;

char s[DMAX];
char op[3][3]={"+-","*/"};

int pos,lg;

arbore* expresie(int prioritate){
    arbore *x,*y;
    if(prioritate == 2){
        if(s[pos] == '('){
            pos++;
            x=expresie(0);
            pos++;
        }
        else{
            x=new arbore();
            while(s[pos] >= '0' && s[pos] <= '9'){
                x->val=x->val*10 + s[pos]-'0';
                pos++;
            }
        }
    }
    else{
        x=expresie(prioritate+1);
        while(strchr(op[prioritate],s[pos]) && pos < lg){
            y=new arbore();
            y->val=0;
            y->op=s[pos++];
            y->st=x;
            y->dr=expresie(prioritate+1);
            x=y;
        }
    }
    return x;
}
int dfs(arbore *node){
    if(node->op == '+')
        return dfs(node->st)+dfs(node->dr);
    else if(node->op == '-')
        return dfs(node->st)-dfs(node->dr);
    else if(node->op == '*')
        return dfs(node->st)*dfs(node->dr);
    else if(node->op == '/')
        return dfs(node->st)/dfs(node->dr);
    else
        return node->val;
}
int main(){
    fin>>s;
    lg=strlen(s);

    start=expresie(0);
    fout<<dfs(start)<<'\n';
    return 0;
}