Cod sursa(job #1360937)

Utilizator JustGingaGinga Tudor-Adrian JustGinga Data 25 februarie 2015 18:50:30
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>
using namespace std;
const int MAX = 100010;
char S[MAX], *p = S;

int termen();
int factor();

int eval()
{
    int r = termen();
    while (*p == '+' or *p == '-')
        switch (*p)
        {
            case '+': p++; r = r + termen(); break;
            case '-': p++; r = r - termen(); break;
        }
    return r;
}

int termen()
{
    int r = factor();
    while (*p == '*' or *p == '/')
        switch (*p)
        {
            case '*': p++; r = r * factor(); break;
            case '/': p++; r = r / factor(); break;
        }
    return r;
}

int factor()
{
    int r = 0;
    if (*p == '(')
    {
        p++;
        r = eval();
        p++;
    }
    else
        while ('0' <= *p && *p <= '9')
        {
            r = r * 10 + *p - '0';
            p++;
        }
    return r;
}

int main()
{
    fgets ( S, MAX, fopen ("evaluare.in", "r") );
    fprintf ( fopen ("evaluare.out", "w"), "%ld\n", eval() );
    return 0;
}