Cod sursa(job #2049349)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 27 octombrie 2017 08:57:45
Problema Evaluarea unei expresii Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.73 kb
# include <fstream>
# include <cstring>
# define DIM 100010
# define INF 1000000000
# define a first
# define b second
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char t[DIM],s[DIM];
pair<int,char> v[DIM];
int vec[DIM],n,i,nr,k,u,r;
int main () {
    fin>>t+2;
    t[1]='(';
    n=strlen(t+1);
    n++;
    t[n]=')';
    for(i=1;i<=n;i++){
        if((!(t[i]>='0'&&t[i]<='9'))&&nr){
            v[++k].a=nr;
            nr=0;
        }
        if(t[i]==')'){
            while(s[u]!='('){
                v[++k].a=-INF;
                v[k].b=s[u];
                u--;
            }
            u--;
            continue;
        }
        if(t[i]=='('){
                s[++u]=t[i];
                continue;
        }
        if(t[i]=='+'||t[i]=='-'){
            while(s[u]!='('&&s[u]!=')'){
                v[++k].a=-INF;
                v[k].b=s[u];
                u--;
            }
            s[++u]=t[i];
            if(k==0)
                v[++k].a=0;
            continue;
        }
        if(t[i]=='*'||t[i]=='/'){
            while(s[u]=='*'||s[u]=='/'){
                v[++k].a=-INF;
                v[k].b=s[u];
                u--;
            }
            s[++u]=t[i];
            continue;
        }
        nr=nr*10+t[i]-'0';
    }
    for(i=1;i<=k;i++)
        if(v[i].a!=-INF)
            vec[++r]=v[i].a;
        else{
            if(v[i].b=='*')
                vec[r-1]*=vec[r];
            if(v[i].b=='/')
                vec[r-1]/=vec[r];
            if(v[i].b=='-')
                vec[r-1]-=vec[r];
            if(v[i].b=='+')
                vec[r-1]+=vec[r];
            r--;
        }
    fout<<vec[1]<<"\n";
    return 0;
}