Cod sursa(job #2875337)

Utilizator kanyjmkSabau Eduard kanyjmk Data 21 martie 2022 14:03:42
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.67 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#include <fstream>

using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char s[100010], *p = s;

long evaluare();
long termen();

long factor()
{
    long rez = 0;
    if(*p == '(')                      //incepe o subexpresie care trebuie calculata apeland functia ce ia in considerare toate operatiile
    {
        p++;                           //sarim peste (
        rez = evaluare();
        p++;                           //sarim peste )
    }
    else{                               //daca nu incepe o subexpresie, avem un singur numar ce trebuie construit
        while(*p >= '0' && *p <= '9')
        {
            rez = rez*10 + (*p-'0');
            p++;
        }
    }
    return rez;
}


long termen()
{
    long rez = factor();            //initializam rezultatul cu primul factor
    while ( *p == '*' || *p == '/') //cautam toate * si / si inmultim/impartim cu rezultatul
    {
        if(*p == '*')
        {
            p++;
            rez *= factor();
        }
        else {
            p++;
            rez /= factor();
        }
    }
    return rez;
}

long evaluare()
{
    long rez = termen();            //initializam rezultatul cu primul termen al adunarii/scaderii
    while( *p == '+' || *p == '-')  //cautam toate + si - si adunam/scadem termenii respectivi la rezultat
    {
        if(*p == '+')
        {
            p++;
            rez += termen();
        }
        else{
            p++;
            rez -= termen();
        }
    }
    return rez;

}
int main()
{
    f>>s;
    g<<evaluare();

    return 0;
}