Cod sursa(job #2090206)

Utilizator PredaBossPreda Andrei PredaBoss Data 17 decembrie 2017 19:12:43
Problema Evaluarea unei expresii Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int eval();
int prelucrare();
int factor();
struct poz
{
    int x,y;
};
poz t[100000];
int i,k,s,p1,p2;
string a;
int eval()
{
    p2++;
    t[p2].y=1;
    t[p2].x=0;
    while(i<a.size() && a[i]!=')'){
        if(a[i]=='+')
            t[p2].y=1;
        else{
            if(a[i]=='-')
                t[p2].y=-1;
            else{
                t[p2].x+=t[p2].y*prelucrare();
                if(a[i]==')'){
                    p2--;
                    return t[p2+1].x;}}
        }
    i++;
    }
    p2--;
    return t[p2+1].x;

}
int prelucrare()
{
    int p;
    p=factor();
    while(i<a.size() && a[i]!='+' && a[i]!='-' && a[i]!=')'){
        if(a[i]=='*'){
                i++;
            p*=factor();}
        else{
            if(a[i]=='/'){
                    i++;
                p/=factor();}
        }
    }
    return p;
}
int factor()
{
       int n=0;
    if(a[i]=='('){
        i++;
        n=eval();
        i++;}
    else{
    while(i<a.size() && a[i]-'0'<10 && a[i]-'0'>=0){
        n=n*10+(a[i]-'0');
        i++;
    }
    }
    return n;
}
int main()
{fin>>a;
i=0;
p1=1;
p2=0;
fout<<eval();

    return 0;
}