Cod sursa(job #2048554)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 26 octombrie 2017 11:20:16
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 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 n,i,nr,k,u;
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];
            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)
            fout<<v[i].a<<" ";
    else
            fout<<v[i].b<<" ";
    return 0;
}