Cod sursa(job #1647828)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 10 martie 2016 22:16:08
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;

int n , p;
char s[100010];

int eval();

int getNr()
{
    int x = 0;
    while (isdigit(s[p]))
        x = x * 10 + s[p] - '0', p++;
    p--;

    return x;
}

int factor()
{
    int ret;
    if (s[p] == '(')
        p++, ret = eval();
    else
        ret = getNr();

    p++;
    return ret;
}

int termen()
{
    int ret = factor();
    while (s[p] == '*' || s[p] == '/')
        if (s[p] == '*') p++, ret *= factor();
        else p++, ret /= factor();

    return ret;
}

int eval()
{
    int ret = termen();
    while (s[p] == '+' || s[p] == '-')
        if (s[p] == '+') p++, ret += termen();
        else p++, ret -= termen();

    return ret;
}

int main()
{
    freopen("evaluare.in","r",stdin);
    freopen("evaluare.out","w",stdout);

    gets(s + 1); n = strlen(s + 1);

    p = 1;
    printf("%d\n", eval());

    return 0;
}