Cod sursa(job #1779791)

Utilizator mirunazMiruna Zavelca mirunaz Data 15 octombrie 2016 16:50:04
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <cstdio>
using namespace std;

int p=0;
char s[100002];

int expresie ();

int numar()
{
    int ans = 0;
    while (s[p] >= '0' && s[p] <= '9'){
        ans = ans*10 + (s[p] - '0');
        p ++;
    }
    return ans;
}

int factor ()
{
    int ans = 0;
    if (s[p] == '('){
        p ++;
        ans = expresie ();
        p ++;
    }
    else {
        ans = numar ();
    }
    return ans;
}

int termen ()
{
    int ans = factor();
    while (s[p] == '*' || s[p] == '/'){
        p ++;
        if (s[p-1] == '*'){
            ans *= factor ();
        }
        else{
            ans /= factor ();
        }
    }
    return ans;
}

int expresie ()
{
    int ans = termen();
    while (s[p] == '+' || s[p] == '-'){
        p ++;
        if (s[p-1] == '+'){
            ans += termen ();
        }
        else{
            ans -= termen ();
        }
    }
    return ans;
}

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