Cod sursa(job #913193)

Utilizator dumitrualexAlex Dumitru dumitrualex Data 13 martie 2013 10:20:03
Problema Evaluarea unei expresii Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <cstdio>

using namespace std;

char a[100005];
int i;

int exp();
int termen();
int factor();

int exp()
{
    int k = termen();
    while (a[i] == '+' || a[i] == '-')
    {
        if (a[i] == '+')
        {
            i++;
            k += termen();
        }
        else
        {
            i++;
            k -= termen();
        }
    }
    return k;
}

int termen()
{
    int k = factor();
    while (a[i] == '*' || a[i] == '/')
    {
        if (a[i] == '*')
        {
            i++;
            k *= termen();
        }
        else
        {
            i++;
            k /= termen();
        }
    }
    return k;
}

int factor()
{
    int k = 0;
    if (a[i] == '(')
    {
        i++;
        k = exp();
        i++;
    }
    else
    {
        while (a[i] >= '0' && a[i] <= '9')
        {
            k = k * 10 + a[i] - '0';
            i++;
        }
    }
    return k;
}

int main()
{
    freopen("evaluare.in", "r", stdin);
    freopen("evaluare.out", "w", stdout);
    gets(a);
    printf("%d\n", exp());
    return 0;
}