Cod sursa(job #2030835)

Utilizator rangal3Tudor Anastasiei rangal3 Data 2 octombrie 2017 12:39:44
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <cstring>
#define in "evaluare.in"
#define out "evaluare.out"
#define N 100003

using namespace std;

ifstream fin(in);
ofstream fout(out);

char s[N],*p = s;
int n;

inline int expr();
inline int termen();
inline int factor();

inline int numar()
{
    int A = 0;
    int neg = 1;
    if(*p == '-')
    {
        neg = -1;
        ++p;
    }
    while(*p >= '0' && *p <= '9')
    {
        A = A*10 + *p - '0';
        ++p;
    }
    return A*neg;
}

inline int expr()
{
    int A = termen();
    while(*p != ')')
    {
        if(*p == '+')
            ++p,A += termen();
        else
            ++p,A -= termen();
    }
    ++p;
    return A;
}

inline int termen()
{
    int A = factor();
    while(*p == '*' or *p == '/')
    {
        if(*p == '*')
            ++p,A *= factor();
        else ++p, A /= factor();
    }
    return A;
}

inline int factor()
{
    if(*p == '(')
    {
        ++p;
        return expr();
    }
    return numar();
}

int main()
{
    fin.getline(s,N);

    n = strlen(s);
    s[n] = ')';
    s[n+1] = '\0';

    fout<<expr()<<"\n";

    fin.close(); fout.close();
    return 0;
}