Cod sursa(job #1584238)

Utilizator andreinmAndrei andreinm Data 29 ianuarie 2016 20:21:05
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <cstdio>
#include <cstring>
#include <cctype>
using namespace std;

const int Nmax = 100010;
char s[Nmax], *p = s;

int eval();

int getNum()
{
    int x = 0;
    while (isdigit(*p))
        x = x * 10 + *p - '0', p++;
    return x;
}

int factor()
{
    int ret;
    if (*p == '('){
            p++;
            ret = eval();
            p++;
        }
        else ret = getNum();
    return ret;
}

int termen()
{
    int ret = factor();
    while (*p == '*' || *p == '/')
        if (*p == '*'){
            p++;
            ret *= factor();
        }
        else {
            p++;
            ret /= factor();
        }
    return ret;
}

int eval()
{

    int ret = termen();
    while (*p == '+' || *p == '-')
        if (*p == '+'){
            p++;
            ret += termen();
        }
        else {
            p++;
            ret -= termen();
        }
    return ret;
}
int main()
{
    freopen ("evaluare.in", "r", stdin);
    freopen ("evaluare.out", "w", stdout);

    gets(s);
    printf ("%d\n", eval());
    return 0;
}