Cod sursa(job #3260284)

Utilizator Alexbora13Bora Ioan Alexandru Alexbora13 Data 1 decembrie 2024 13:52:13
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

const int NMAX = 100000;

char v[NMAX+1], *curr;

int numar();
long long evaluare();
int termen();

int numar()
{
    long long nr = 0;
    if(*curr == '(')
    {
        curr++;
        nr = evaluare();
        curr++;
    }
    else if(isdigit(*curr))
    {
        while(isdigit(*curr))
            nr = nr*10 + (*curr - '0'), curr++;
    }
    return nr;
}

int termen()
{
    int nr = numar();
    while(*curr == '*' || *curr == '/')
    {
        if(*curr == '*')
        {
            curr++;
            nr*=numar();
        }
        else
        {
            curr++;
            nr/=numar();
        }
    }
    return nr;
}

long long evaluare()
{
    long long rez = termen();
    while(*curr == '-' || *curr == '+')
    {
        if(*curr == '-')
        {
            curr++;
            rez-=termen();
        }
        else
        {
            curr++;
            rez+=termen();
        }
    }
    return rez;
}

int main()
{
    fin.getline(v, NMAX);
    curr = v;
    fout << evaluare();
    return 0;
}