Cod sursa(job #2939292)

Utilizator AlexiaPAlexia Papadie AlexiaP Data 13 noiembrie 2022 13:58:59
Problema Evaluarea unei expresii Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
char e[100010];
int c;
int suma(), produs(), factor(), numar();
int main()
{f>>e;
g<<suma();
return 0;

    return 0;
}
int suma()
{
     int ret=produs();
     while(e[c]=='+' || e[c]=='-')
     {
         if(e[c]=='+'){c++;ret+=produs();}
         else {c++;ret-=produs();}
     }
     return ret;
}
int produs()
{
    int ret=factor();
     while(e[c]=='*' || e[c]=='/')
     {
         if(e[c]=='*'){c++;ret*=factor();}
         else {c++;ret/=produs();}
     }
     return ret;
}
int factor()
{
    //cazul 1:factorul este o paranteza(suma de termeni)
    if(e[c]=='(')
    {
        c++;
        int ret=suma();
        c++;
        return ret;///dupa evaluarea parantezei cursorul ajunge pe ')'.Trec peste.
    }
    ///cazul 2:factorul este un numar
    return numar();
}
int numar()
{
    int ret=0;
    while(isdigit(e[c]))
    {
        ret=10*ret+e[c]-'0';
        c++;
    }
    return ret;
}