Cod sursa(job #1638186)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 7 martie 2016 21:40:41
Problema Evaluarea unei expresii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
#include <stack>
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char s[100005],op[100005];
int a[100005];
stack <int>S;
int Evaluare(int x,int y)
    {int v=a[x],v1;
     int i;
     for(i=x+1;i<=y;++i)
        {if(op[i-1]=='+'){v=v+Evaluare(i,y);break;}
         else if(op[i-1]=='-'){a[i]=-a[i];v=v+Evaluare(i,y);break;}
         else if(op[i-1]=='/')v=v/a[i];
         else if(op[i-1]=='*')v=v*a[i];
        }
       // fout<<x<<" "<<v<<"\n";
     return v;
    }
int main()
{int ct=0,i;
 fin>>s;
 int nr;
 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]-48;
                                     i++;
                                    }
                              i--;
                              ct++;a[ct]=nr;
                             }
    else if(s[i]=='(')S.push(ct+1);
    else if(s[i]==')'){a[S.top()]=Evaluare(S.top(),ct);ct=S.top();S.pop();
                       //fout<<S.top()<<" "<<ct<<"\n";
                      }
    else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')op[ct]=s[i];
    }
 fout<<Evaluare(1,ct);
}