Cod sursa(job #301827)

Utilizator tibiletsKoos Tiberiu Iosif tibilets Data 8 aprilie 2009 14:33:31
Problema Evaluarea unei expresii Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<fstream.h>
#include<string.h>
char s[100100],e[100100];
long p[100100],v[100100],i,j,n,k;
long arb(long li,long ls)
{long i,j,min;
 min=p[ls];i=ls;
 for(j=ls;j>=li;j--)
  if(p[j]<min)
  {min=p[j];i=j;}
 if(li==ls)return v[i];
 switch(e[i])
 {case '+':return arb(li,i-1)+arb(i+1,ls);
  case '-':return arb(li,i-1)-arb(i+1,ls);
  case '*':return arb(li,i-1)*arb(i+1,ls);
  case '/':return arb(li,i-1)/arb(i+1,ls);}
}
int main()
{ifstream f("evaluare.in");
ofstream g("evaluare.out");
f.get(s,100100);
n=strlen(s);
for(;i<n;++i)
 switch(s[i])
 {case ')':j-=2;break;
  case '(':j+=2;break;
  case '+':p[k]=j+1;e[k++]='+';break;
  case '-':p[k]=j+1;e[k++]='-';break;
  case '*':p[k]=j+2;e[k++]='*';break;
  case '/':p[k]=j+2;e[k++]='/';break;
  default :{while(s[i]>='0'&&s[i]<='9')
	    {v[k]=v[k]*10+s[i]-'0';
	     ++i;}
	    p[k++]=2000000000;--i;}
 }
g<<arb(0,k-1);
return 0;
}