Cod sursa(job #792744)

Utilizator TeodoraTanaseTeodora Tanase TeodoraTanase Data 29 septembrie 2012 17:08:24
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>

#define LGMAX 100003

using namespace std;

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

int i;

char s[LGMAX];

int term();
int factor();

int eval()
{
    int res = term();

    if (s[i] == '+' || s[i] == '-')
    {
        ++i;

        if (s[i - 1] == '+')
            res += term();
        else
            res -= term();
    }

    return res;
}

int term()
{
    int res = factor();

    if (s[i] == '*' || s[i] == '/')
    {
        ++i;

        if (s[i - 1] == '*')
            res *= factor();
        else
            res /= factor();
    }

    return res;
}

int factor()
{
    int res = 0;

    if (s[i] == '(')
    {
        ++i;
        res = eval();
        ++i;
    }
    else
        while (s[i] >= '0' && s[i] <= '9')
        {
            res = res * 10 + s[i] - '0';
            ++i;
        }

    return res;
}

int main()
{
    fgets (s, LGMAX, inFile);
    fprintf (outFile, "%d\n", eval());

    return 0;
}