Cod sursa(job #995295)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 8 septembrie 2013 16:00:18
Problema Evaluarea unei expresii Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int n,v[100005],x,ad=0;
char a[100005],sign[100005],sgn;
int Solve()
{ int sol=0,last=0;
   for(;;)
    { if (v[x]==-1)
       {ad++;
        if (sign[x]=='+') {x++; last=Solve(); sol+=last; }
         else
        if (sign[x]=='-') {x++; last=Solve()*(-1); sol+=last; }
         else
        if (sign[x]=='*') {sol-=last; x++; last*=Solve(); sol+=last; }
         else
        if (sign[x]=='/') {sol-=last; x++; last/=Solve(); sol+=last; }
        ad--;
        }
         else if(v[x]==-2 || v[x]==0) {x++; return sol;}
            else
        {
        if (sign[x]=='+') {last=v[x]; sol+=last; }
         else
        if (sign[x]=='-') {last=v[x]*(-1); sol+=last; }
         else
        if (sign[x]=='*') {sol-=last; last*=v[x]; sol+=last; }
         else
        if (sign[x]=='/') {sol-=last; last/=v[x]; sol+=last; }
        x++;

        }
    }

}
int main()
{ int i,k=0,nr=0,len;
    f.getline(a,100005);
     len=strlen(a);
      sgn='+';
   for(i=0;i<len;i++)
     { if (a[i]=='(') {k++; sign[k]=sgn; sgn='+'; v[k]=-1;}
        else
       if (a[i]==')') {k++; v[k]=-2;}
        else
       if (a[i]>=48 && a[i]<=57)
       { nr=nr*10+(a[i]-48);
          if (a[i+1]<48 || a[i+1]>57) {k++; sign[k]=sgn; v[k]=nr; nr=0;}
       }
        else sgn=a[i];
     }

     for(i=1;i<=k;i++)
       cout<<sign[i]<<" "<<v[i]<<"\n";

    x=1; ad=0;
   g<<Solve();
    return 0;
}