Cod sursa(job #2567413)

Utilizator PaulOrasanPaul Orasan PaulOrasan Data 3 martie 2020 17:04:43
Problema Evaluarea unei expresii Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <fstream>
#include <cstring>
using namespace std;

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

const int NMAX=100100;
char s[NMAX];
int n;
int evaluareExpresie(int&);
int gasireTermen(int&);
int gasireFactor(int&);

void citire()
{
    fin.getline(s,NMAX);
    n=strlen(s);
}
int evaluareExpresie(int &i)
{
    int a=gasireTermen(i),b=NMAX;
    while ((s[i]=='+' || s[i]=='-')&&b!=0){
        switch(s[i]){
            case '+':
                i++;
                b=gasireTermen(i);
                a+=b;
                break;
            case '-':
                i++;
                b=gasireTermen(i);
                a-=b;
                break;
        }
    }
    return a;
}
int gasireTermen(int &i)
{
    int a=gasireFactor(i);
    while ((s[i]=='*' || s[i]=='/')&&a!=0){
        switch(s[i]){
            case '*':
                i++;
                a*=gasireFactor(i);
                break;
            case '/':
                i++;
                a/=gasireFactor(i);
                break;
        }
    }
    return a;
}
int gasireFactor(int &i)
{
    int a=0;
    if (s[i]=='('){
        i++;
        a=evaluareExpresie(i);
        i++;
    }else{
        while (s[i]>='0' && s[i]<='9' && i<n){
            a=a*10+s[i]-'0';
            i++;
        }
    }
    return a;
}
int main()
{
    int i=0;
    citire();
    fout<<evaluareExpresie(i)<<'\n';
}