Cod sursa(job #2643863)

Utilizator Ionut_neuer58Raducu Ioan Stefan Ionut_neuer58 Data 21 august 2020 22:20:56
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
#define MH 2

using namespace std;

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

char s[100010], ch[4][4]{"+-", "*/", "^", ""}, *p=s;

int eval(int);
int getNr();
int rez(int, char, int);

int rez(int a, int b, char c)
{
    switch(c)
    {
    case '+':
        return a+b;
    case '-':
        return a-b;
    case '*':
        return a*b;
    case '/':
        return a/b;
    }
    return 0;
}

int eval(int h)
{
    int r;
    if(h==MH) r=getNr();
    else r=eval(h+1);
    while(strchr(ch[h], *p))
        r=rez(r, eval(h+1), *(++p-1));
    return r;
}

int getNr()
{
    int r=0;
    if(*p=='(') ++p, r=eval(0), ++p;
    else
    {
        while(*p>='0' && *p<='9')
            r=r*10+*(++p-1)-'0';
    }
    return r;
}

int main()
{
    in>>s;
    s[strlen(s)]='\n';
    out<<eval(0);
    return 0;
}