Cod sursa(job #1884419)

Utilizator Horia14Horia Banciu Horia14 Data 18 februarie 2017 18:54:01
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include<cstdio>
#define NMAX 100001
using namespace std;

char e[NMAX];
int n;

int Expresie();
int Termen();
int Factor();

int Expresie()
{
    int val = Termen();
    while(e[n] == '+' || e[n] == '-')
    {
        if(e[n] == '+')
        {
            n++;
            val += Termen();
        }
        else
        {
            n++;
            val -= Termen();
        }
    }
    return val;
}

int Termen()
{
    int val;
    val = Factor();
    while(e[n] == '*' || e[n] == '/')
    {
        if(e[n] == '*')
        {
            n++;
            val *= Factor();
        }
        else
        {
            n++;
            val /= Factor();
        }
    }
    return val;
}

int Factor()
{
    int val, semn;
    val = 0; semn = 1;
    while(e[n] == '-')
    {
        n++;
        semn = -semn;
    }
    if(e[n] == '(')
    {
        n++; // trec peste (
        val = Expresie();
        n++;
        return val*semn;
    }
    while(e[n] >='0' && e[n] <= '9')
    {
        val = 10*val + e[n] - '0';
        n++;
    }
    return val*semn;
}

int main()
{
    FILE *fin, *fout;
    fin = fopen("evaluare.in","r");
    fout = fopen("evaluare.out","w");
    fscanf(fin,"%s",e);
    fclose(fin);
    fprintf(fout,"%d\n",Expresie());
    fclose(fout);
    return 0;
}