Cod sursa(job #2674508)

Utilizator WladDalwMvladutu cristian vlad WladDalwM Data 19 noiembrie 2020 15:13:15
Problema Evaluarea unei expresii Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>

using namespace std;

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

string s;

int i = 0;

inline long long factor();
inline long long termen();
inline long long expresie();

long long factor()
{
    int rez = 0;
    while(s[i] >= '0' && s[i] <= '9')
        rez *= 10, rez += s[i] - '0',i++;
    return rez;
}

long long termen()
{
    int rez = 0;
        rez = factor();
    while(s[i] == '*' || s[i] == '/')
    {
        if(s[i] == '*')
        {
            if(s[++i] == '(')
                rez *= expresie();
            else
                rez *= factor();
        }
        else
        if(s[i] == '/')
        {
            if(s[++i] == '(')
                rez *= expresie();
            else
            rez /= factor();
        }
    }
    return rez;


}

long long expresie()
{
    long long rez = 0;
    if(s[i] == '(')
        i++;
    rez += termen();
    while(s[i] == '+' || s[i] == '-')
    {
        if(s[i] == '+')
            ++i, rez += termen();
        else
        if(s[i] == '-')
            ++i, rez -= termen();
    }
    if(s[i] == ')')
        i++;
    return rez;
}

int main()
{
    in >> s;
    out << expresie();
    return 0;
}