Cod sursa(job #1738578)

Utilizator RRomaniucRomaniuc Radu Andrei RRomaniuc Data 7 august 2016 01:28:22
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include<fstream>
#include<string>
#define MAXN 100000
#define ll long long
std::ifstream input("evaluare.in");
std::ofstream output("evaluare.out");
std::string infix;
int position = 0;
ll expression(int);
int priority(char op)
{
    if(op == '+' || op == '-') return 0;
    if(op == '/' || op == '*') return 1;
    
    return -1;
}
ll evaluate(ll x, ll y, char op)
{
    switch(op)
    {
        case '+': return x+y;
        case '-': return x-y;
        case '/': return x/y;
        case '*': return x*y;
    }
    
    return -1;
}
ll expression(int level)
{
    ll result = 0, next = 0; char op;
    
    if(level == 2)
    {
        if(infix[position] == '(')
        {
            position++;
            result = expression(0);
            position++;
        }
        else
            while(infix[position] >= '0' && infix[position] <= '9')
            {
                result = result * 10 + infix[position] - '0';
                position++;
            }
        
    }
    
    else
    {
        result = expression(level + 1);
        while(priority(infix[position]) == level)
        {
            op = infix[position]; position++;
            next = evaluate(result, expression(level + 1), op);
            result = next;
        }
        
    }
    
    
    return result;
}
int main()
{
    std::getline(input,infix);
    
    output << expression(0);
    
    return 0;
}