Pagini recente » Cod sursa (job #2118025) | Cod sursa (job #63937) | Cod sursa (job #2790171) | Cod sursa (job #2445727) | Cod sursa (job #2153039)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
const int inf=1<<30;
char s[123456];
int n;
int v[123456],w[123456];
int cod(int p,int q)
{
if(p==q)
return v[p];
else
if(p<q)
{
int poz,mn=inf;
for(int i=p;i<=q;++i)
if(mn>w[i])
mn=w[i],poz=i;
int st=cod(p,poz-1);
int dr=cod(poz+1,q);
if(v[poz]==1)
return st+dr;
else if(v[poz]==2)
return st-dr;
else if(v[poz]==3)
return st*dr;
else return st/dr;
}
}
int main()
{
int j=0;
f.getline(s,123456);
n=strlen(s);
int b=0;
int i=0;while(i<n)
{
if(s[i]=='(')
b+=20;
else
if(s[i]==')')
b-=20;
else
if(s[i]=='+')
w[j++]=1+b,v[j-1]=1;
else
if(s[i]=='-')
w[j++]=2+b,v[j-1]=1;
else
if(s[i]=='*')
w[j++]=10+b,v[j-1]=3;
else
if(s[i]=='/')
w[j++]=10+b,v[j-1]=4;
else
{
int p=0;
while(isdigit(s[i]))
p=p*10+s[i]-'0',++i;
--i;
w[j++]=inf;
v[j-1]=p;
}
i++;
}
g<<cod(0,j-1);
return 0;
}