Cod sursa(job #2555073)

Utilizator MirunaStefaniaLupascu Miruna-Stefania MirunaStefania Data 23 februarie 2020 18:01:14
Problema Evaluarea unei expresii Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include<fstream>
#include<cstring>
#include<algorithm>
#define N 100005
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");

int evaltermen();
int evalfactor();
int evalexpresie();

char e[N];
int lg,i;


int evalexpresie()
{
    int t=evaltermen();
    while(i<lg&&(e[i]=='-'||e[i]=='+'))
    {
        char op=e[i];
        i++;
        int f=evaltermen();
        if(op=='-')t=t-f;
        else t=t+f;
    }
    return t;
}

int evaltermen()
{
    int t=evalfactor();
    while(i<lg&&(e[i]=='*'||e[i]=='/'))
    {
         char op=e[i];
        i++;
        int  f=evaltermen();
        if(op=='*')t=t*f;
        else t=t/f;
    }
    return t;
}

int evalfactor()
{
    int t;
    if(e[i]=='(')
    {
        i++;//sarim peste (
        t=evalexpresie();
        i++;//sarim peste )
        return t;
    }
    else
    {
        //formam nr
        int nr=0;
        while(i<lg&&isdigit(e[i]))
        {
            nr=nr*10+e[i]-'0';
            i++;
        }
        return nr;
    }
}

int main()
{
    fin>>e;
    lg=strlen(e);
    fout<<evalexpresie();

    return 0;
}