Cod sursa(job #2369020)

Utilizator AdelaCorbeanuAdela Corbeanu AdelaCorbeanu Data 5 martie 2019 20:39:06
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>

using namespace std;

char s[100001], *p=s;

long long eval();     /// calculeaza +,-
long long termen();   /// calculeaza *,/
long long fact();     /// formeaza numarul (operandul), parcurge (,)

long long eval()
{
    long long r = termen();
    while(*p == '+' || *p =='-' )
        if(*p == '+')
            ++p, r += termen();
        else
            ++p, r -= termen();
    return r;
}

long long termen()
{
    long long r = fact();
    while(*p == '*' || *p =='/')
        if(*p == '*')
            ++p, r *= fact();
        else
            ++p, r /= fact();
    return r;
}

long long fact()
{
    long long r = 0;
    if(*p == '(')
        ++p, r = eval(),++p;
    else
        while(*p>='0' && *p<='9')
            r = r*10 + *p - '0', ++p;
    return r;
}

int main()
{
    ifstream fin("evaluare.in");
    ofstream fout("evaluare.out");
    fin.get(s,100001);
    fout << eval();
    return 0;
}