Cod sursa(job #2252929)

Utilizator zdavid112zIon David-Gabriel zdavid112z Data 3 octombrie 2018 12:21:40
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;

char str[100005], *s;

int getint();
int fact();
int eval();

int getint()
{
    if(*s == '(')
    {
        s++;
        int nr = eval();
        s++;
        return nr;
    }
    int nr = 0;
    while(isdigit(*s))
    {
        nr = nr * 10 + *s - '0';
        s++;
    }
    return nr;
}

int fact()
{
    int nr = getint();
    while(*s == '*' || *s == '/')
    {
        if(*s == '*')
        {
            s++;
            int b = getint();
            nr *= b;
        }
        else
        {
            s++;
            int b = getint();
            nr /= b;
        }
    }
    return nr;
}

int eval()
{
    int nr = fact();
    while(*s == '+' || *s == '-')
    {
        if(*s == '+')
        {
            s++;
            int b = fact();
            nr += b;
        }
        else
        {
            s++;
            int b = fact();
            nr -= b;
        }
    }
    return nr;
}

int main()
{
    freopen("evaluare.in", "r", stdin);
    freopen("evaluare.out", "w", stdout);
    scanf("%s", str);
    s = str;
    printf("%d", eval());
    return 0;
}