Pagini recente » Cod sursa (job #2291456) | Cod sursa (job #1761460) | Cod sursa (job #1301055) | Cod sursa (job #275438) | Cod sursa (job #2153118)
#include <fstream>
#define inf 1000000100
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int q;
char c[100001];
long long nr[100001],oper[100001],qper[100001];
long long DI(int p,int q)
{
if(p<q)
{
int mini=inf,poz=p;
for(int i=p;i<=q;i++)
if(oper[i]<mini)
mini=oper[i],poz=i;
int a1=DI(p,poz-1);
int a2=DI(poz+1,q);
if(qper[poz]==1)
return a1+a2;
else
if(qper[poz]==2)
return a1-a2;
else
if(qper[poz]==3)
return a1*a2;
return a1/a2;
}
else
if(p==q)
{
return nr[p];
}
}
int main()
{
f.get(c,100001);
int x;
int b=0;
for(int i=0;c[i];i++)
{
if(isdigit(c[i]))
{
x=0;
while(isdigit(c[i]))
x=x*10+(c[i]-'0'),i++;
i--;
nr[++q]=x;
oper[q]=inf;
qper[q]=inf;
}
else
{
if(c[i]=='(')
b+=20;
else
if(c[i]==')')
b-=20;
else
if(c[i]=='+')
nr[++q]=inf,oper[q]=b+1,qper[q]=1;
else
if(c[i]=='-')
nr[++q]=inf,oper[q]=b+1,qper[q]=2;
else
if(c[i]=='*')
nr[++q]=inf,oper[q]=b+10,qper[q]=3;
else
if(c[i]=='/')
nr[++q]=inf,oper[q]=b+10,qper[q]=4;
}
}
g<<DI(1,q);
return 0;
}