Cod sursa(job #2538778)

Utilizator norryna07Alexandru Norina norryna07 Data 5 februarie 2020 08:40:59
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
#define N 100005
using namespace std;

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

char e[N];
int i, lg;

int Expresie();
int Termen();
int Factor();

int main()
{
    fin.getline(e, N);
    fin.close();
    lg=strlen(e);
    fout<<Expresie();
    fout.close();
    return 0;
}

int Expresie() ///operatorii + sau -
{
    int sum=Termen(); ///primul termen
    while (i<lg && (e[i]=='+' || e[i]=='-'))
        if (e[i]=='+') {i++; sum+=Termen();}
        else {i++; sum-=Termen();}
    return sum;
}

int Termen() ///operatori * /
{
    int prod=Factor(); ///primul factor
    while (i<lg && (e[i]=='*' || e[i]=='/'))
        if (e[i]=='*') {i++; prod*=Factor();}
        else {i++; prod/=Factor();}
    return prod;
}

int Factor()
{
    int semn=1, val=0;
    while (e[i]=='-') semn=-semn, i++;
    if (e[i]=='(')
    {
        i++; val=Expresie(); i++;
        return semn*val;
    }
    while (e[i]>='0' && e[i]<='9')
        val=val*10+(e[i]-'0'), i++;
    return semn*val;


}