Cod sursa(job #1581927)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 27 ianuarie 2016 13:04:22
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;

const int Nmax = 100000 + 10;

char s[Nmax] , *p;

int eval();

int getNr()
{
    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 = getNr();

    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); p = s;
    printf("%d\n", eval());

    return 0;
}