Cod sursa(job #1641384)

Utilizator erich98erich stan erich98 Data 8 martie 2016 22:46:09
Problema Evaluarea unei expresii Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>
#define DIM 100002

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

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

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

int eval()
{
    int val = term();
    if(s[p] == '+' || s[p] == '-')
    {
        if(s[p] == '+')
            ++ p, val += term();
        if(s[p] == '-')
            ++ p, val -= term();
    }
    return val;
}
int term()
{
    int val = fact();
    if(s[p] == '*' || s[p] == '/')
    {
        if(s[p] == '*')
            ++ p, val *= term();
        if(s[p] == '/')
            ++ p, val /= term();
    }
    return val;
}
int fact()
{
    int val = 0;
    if(s[p] == '(')
    {
        ++ p;
        val = eval();
        ++ p;
    }
    if(s[p] >= '0' && s[p] <= '9')
    {
        while(s[p] >= '0' && s[p] <= '9')
            val = val * 10 + s[p ++] - '0';
    }
    return val;
}
int main()
{
    gets(s);
    n = strlen(s);
    printf("%d\n", eval());
}