Cod sursa(job #898934)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 28 februarie 2013 12:14:08
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <stdio.h>
#include <string.h>

using namespace std;

const int MAX_L = 100010;

int p, len;
char S[ MAX_L ];

inline long long int factor();
inline long long int expresie();

inline long long int termen()
{
    long long int r = factor();

    while( (S[p] == '*' || S[p] == '/') && p <= len)
    {
        ++p;
        if(S[p-1] == '*')
            r *= factor();
        else r /= factor();
    }

    return r;
}

inline long long int factor()
{
    long long int r = 0;

    if(S[p] == '(')
    {
        ++p;
        r = expresie();
        ++p;
    }

    while(S[p] >= '0' && S[p] <= '9' && p <= len)
        r = r * 10 + S[p] - '0', ++p;

    return r;
}

inline long long int expresie()
{
    long long int r = termen();

    while( (S[p] == '+' || S[p] == '-') && p <= len)
    {
        ++p;
        if(S[p-1] == '+')
            r += termen();
        else r -= termen();
    }

    return r;
}

int main()
{
    FILE *f, *g;

    f = fopen("evaluare.in", "r");
    g = fopen("evaluare.out", "w");

    fgets(S, 100005, f);

    len = strlen(S) - 1;
    if(S[len] == '\n')
        --len;

    fprintf(g, "%lld\n", expresie());

    fclose(f);
    fclose(g);

    return 0;
}