Cod sursa(job #748023)

Utilizator alexclpAlexandru Clapa alexclp Data 12 mai 2012 11:47:39
Problema Evaluarea unei expresii Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<stdio.h>

char v[1000005];
int p;

int termen()
{
    int factor();
    int rez = factor();
    while(v[p] == '*' || v[p] == '/') {
        if(v[p] == '*') {
            p ++;
            rez *= factor();
        }
        else {
            p++;
            rez /= termen();
        }
    }
    return rez;
}

int expresie()
{
    int s = termen();
    while(v[p] == '+' || v[p] == '-') {
        if(v[p] == '+') {
            p ++;
            s += termen();
        }
        else {
            p ++;
            s -= termen();
        }
    }
    return s;
}

int factor()
{
    int semn = 1, val = 0;
    while(v[p] == '-'){
        semn -= semn;
        p++;
    }
    if(v[p] == '('){
        p ++;
        val = expresie();
        p ++;
        return semn * val;
    }
    while(v[p] >= '0' && v[p] <= '9') {
        val = val * 10 + v[p] - '0';
        p++;
    }
    return semn * val;
}


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

    int elem = 1;

    gets(v);

    printf("%d\n", expresie());

    return 0;
}