Pagini recente » Cod sursa (job #101921) | Cod sursa (job #1744029) | Cod sursa (job #1721446) | Cod sursa (job #231881) | Cod sursa (job #1153914)
#include<cstdio>
#include<cstring>
#include<algorithm>
#define M -2000000000
using namespace std;
FILE *f=fopen("evaluare.in","r");
FILE *g=fopen("evaluare.out","w");
char a[100002],aux[100002];
int i,p,v[100002],val[100002],k,nr,kk;
int valoare(int a,char c,int b)
{
if(c=='+') return a+b;
if(c=='/') return a/b;
if(c=='*') return a*b;
if(c=='-') return a-b;
}
int construire()
{
int poz,j;
while(1)
{
poz=max_element(v+1,v+k+1)-v;
if(v[poz]==M)return *max_element(val+1,val+k+1);
i=poz;
while(val[i]==M&&i>=1)i--;
j=poz;
while(val[j]==M&&j<=k)j++;
val[poz]=valoare(val[i],aux[poz],val[j]);
v[poz]=M;
val[i]=M;
val[j]=M;
}
}
int main()
{
fscanf(f,"%s",a);
for(i=1;i<=strlen(a);i++)val[i]=M;
for(i=0;i<strlen(a);i++)
{
if(a[i]=='-'||a[i]=='+'){v[++k]=p+1;aux[k]=a[i];}
if(a[i]=='*'||a[i]=='/'){v[++k]=p+2;aux[k]=a[i];}
if(a[i]=='('){p+=3;v[++k]=M;}
if(a[i]==')'){p-=3;v[++k]=M;}
if('0'<=a[i]&&a[i]<='9')
{
nr=0;
while('0'<=a[i]&&a[i]<='9')
{
nr=nr*10+a[i]-'0';i++;
}
i--;
v[++k]=M;
val[k]=nr;
}
}
fprintf(g,"%d",construire());
return 0;
}