Cod sursa(job #2112292)

Utilizator PeraPera Alexandru Pera Data 23 ianuarie 2018 12:08:47
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char S[100001],op[100001];
int pr[256],i,nr,k2,k,V[100001];
int calcul(int V1,int V2, char op){
          if(op=='+')
             return V1+V2;
          if(op=='-')
             return V1-V2;
          if(op=='*')
             return V1*V2;
          if(op=='/')
             return V1/V2;
}
int main()
{fin>>S;
pr['+']=pr['-']=1;
pr['*']=pr['/']=2;
for(i=0;S[i]!=0;i++){
    if(S[i]>='0'&&S[i]<='9'){
       nr=0;
       while(S[i]>='0'&&S[i]<='9'){
             nr=nr*10+S[i]-'0';
             i++;
       }
       i--;
       V[++k2]=nr;
    }
    else
      if(S[i]=='(')
         op[++k]=S[i];
    else
    if(S[i]==')'){
       while(op[k]!='('){
             nr=calcul(V[k2-1],V[k2],op[k]);
             k--;
             k2--;
             V[k2]=nr;
             }
       k--;
    }
    else{
       while(k>0&&pr[S[i]]<=pr[op[k]]){
             nr=calcul(V[k2-1],V[k2],op[k]);
             k--;
             k2--;
             V[k2]=nr;
       }
       op[++k]=S[i];
    }

}
    while(k>0){
          nr=calcul(V[k2-1],V[k2],op[k]);
             k--;
             k2--;
             V[k2]=nr;
    }
  fout<<V[1];









    return 0;
}