Cod sursa(job #2848605)

Utilizator AswVwsACamburu Luca AswVwsA Data 12 februarie 2022 21:48:16
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <stack>
using namespace std;

const int NMAX = 100003;
char s[NMAX];
int i;//chinuri cu stiva poloneza, si tot recursivitate folosesc...
int term();
int fact();
int eval();

int fact()
{
    if (s[i] == '(')
    {
        i++;
        int val = eval();
        i++;
        return val;
    }
    int nr = 0;
    for (;s[i] and s[i] >= '0' and s[i] <= '9'; i++)
        nr = nr * 10 + s[i] - '0';
    return nr;
}

int eval()
{
    int a = term();
    while (s[i] == '+' or s[i] == '-')
    {
        if (s[i] == '+')
        {
            i++;
            a += term();
        }
        else
        {
            i++;
            a -= term();
        }
    }
    return a;
}

int term()
{
    int a = fact();
    while (s[i] == '*' or s[i] == '/')
    {
        if (s[i] == '*')
        {
            i++;
            a *= fact();
        }
        else
        {
            i++;
            a /= fact();
        }
    }
    return a;
}

int main()
{
    ifstream cin("evaluare.in");
    ofstream cout("evaluare.out");
    cin >> s;
    cout << eval();
}