Cod sursa(job #2176017)

Utilizator ciprianprohozescuProhozescu Ciprian ciprianprohozescu Data 16 martie 2018 20:25:35
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#define SMAX 100010

using namespace std;

FILE *fin, *fout;

int i;
char s[SMAX];

int factor();
int termen();
int expresie();

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

int factor()
{
    int x = 0;
    if (s[i] == '(')
    {
        i++;
        x = expresie();
    }
    else
    {
        while (s[i] >= '0' && s[i] <= '9')
        {
            x = x * 10 + s[i] - '0';
            i++;
        }
    }
    return x;
}
int termen()
{
    int f1 = factor();
    while (s[i] == '*' || s[i] == '/')
    {
        if (s[i] == '*')
        {
            i++;
            f1 *= factor();
        }
        else
        {
            i++;
            f1 /= factor();
        }
    }
    return f1;
}
int expresie()
{
    int t1 = termen();
    while (s[i] == '+' || s[i] == '-')
    {
        if (s[i] == '+')
        {
            i++;
            t1 += termen();
        }
        else
        {
            i++;
            t1 -= termen();
        }
    }
    i++;
    return t1;
}