Cod sursa(job #146311)

Utilizator DastasIonescu Vlad Dastas Data 1 martie 2008 15:39:06
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>

const int maxn = 100001;

FILE *in = fopen("evaluare.in","r"), *out = fopen("evaluare.out","w");

char a[maxn];
int k;

int factor();
int termen();
int valoare();
int expresie();

int factor()
{
    int ret = 0;

    if ( a[k] == '(' )
    {
        ++k;
        ret = expresie();
        ++k;
        return ret;
    }

    return valoare();
}

int termen()
{
    int ret = factor();

    while ( a[k] == '*' || a[k] == '/' )
        if ( a[k++] == '*' )
            ret *= factor();
        else
            ret /= factor();

    return ret;
}

int valoare()
{
    int ret = 0;

    while ( a[k] >= '0' && a[k] <= '9' )
        ret = ret * 10 + (a[k++] - '0');

    return ret;
}

int expresie()
{
    int ret = termen();

    while ( a[k] == '+' || a[k] == '-' )
        if ( a[k++] == '+' )
            ret += termen();
        else
            ret -= termen();

    return ret;
}

int main()
{
    fscanf(in, "%s", a);

    fprintf(out, "%d\n", expresie());


	return 0;
}