Cod sursa(job #1641482)

Utilizator erich98erich stan erich98 Data 8 martie 2016 23:30:38
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>
#define DIM 100005

FILE *fin  = freopen("evaluare.in", "r", stdin);
FILE *fout = freopen("evaluare.out", "w", stdout);

using namespace std;
int n;
char s[DIM], *p = s;

int eval();
int term();
int fact();

int eval()
{
    int val = term();
    while (*p == '+' || *p == '-')
    {
        if(*p == '+')
        {
            ++ p;
            val += term();
        }
        if(*p == '-')
        {
            ++ p;
            val -= term();
        }
    }
    return val;
}
int term()
{
    int val = fact();
    while (*p == '*' || *p == '/')
    {
        if(*p == '*')
        {
            ++ p;
            val *= fact();
        }
        if(*p == '/')
        {
            ++ p;
            val /= fact();
        }
    }
    return val;
}
int fact()
{
    int val = 0;
    if(*p == '(')
    {
        ++ p;
        val = eval();
        ++ p;
    }
    else
        while(*p >= '0' && *p <= '9')
        {
            val = val * 10 + (*p - '0');
            ++ p;
        }

    return val;
}
int main()
{
    gets(s);
    printf("%d\n", eval());
}