Cod sursa(job #1616672)

Utilizator DiClauDan Claudiu DiClau Data 27 februarie 2016 11:43:48
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include<stdio.h>
using namespace std;
FILE *in = fopen ("evaluare.in", "r"),
    *out = fopen ("evaluare.out", "w");
const int N = 100002;
char v[N];
int n, p = 1;
int expresie();
int factor();
int termen();
int expresie ()
{
    int x = termen ();
    while (v[p] == '+' || v[p] == '-')
    {
        if (v[p] == '+')
        {
            p++;
            x += termen ();
        }
        if (v[p] == '-')
        {
            p++;
            x -= termen ();
        }
    }
    return x;
}
int termen ()
{
    int x = factor();
    while (v[p] == '*' || v[p] == '/')
    {
        if (v[p] == '*')
        {
            p++;
            x *= factor ();
        }
        if (v[p] == '/')
        {
            p++;
            x /= factor ();
        }
    }
    return x;
}
int factor ()
{
    int x = 0, semn = 1;
    if (v[p] == '-')
        semn = -1;
    if (v[p] == '(')
    {
        p++;
        x = expresie();
        p++;
        return x * semn;
    }
    while (v[p] >= '0' && v[p] <= '9')
        x = x * 10 + v[p++] - '0';
    return x * semn;
}
int main ()
{
    int x = fgetc (in);
    while (x != EOF)
    {
        v[++n] = x;
        x = fgetc (in);
    }
    fprintf (out, "%d", expresie());
    return 0;
}