Pagini recente » Cod sursa (job #658447) | Cod sursa (job #1826436) | Cod sursa (job #2499045) | Cod sursa (job #845842) | Cod sursa (job #1793358)
#include <bits/stdc++.h>
#define infinit 100000000
#define infinit1 -100000000
#define infinit2 100000001
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
///infinit=(
///infinit1=*
///infinit2=/
int st[100005],top;
char a[100005];
void Rezolvare()
{
int i,semn,numar,gata,x;
fin>>a;
semn=1;
top=0;
for(i=0;a[i]!=0;)
{
if(a[i]=='-' and a[i+1]!='(')
{
semn=-1;
i++;
}
else if(a[i]=='-' and a[i+1]=='(')
{
semn=-2;
i++;
}
else if(a[i]=='+')
i++;
else if(a[i]=='(')
{
st[++top]=infinit;
i++;
}
else if(a[i]=='*')
{
st[++top]=infinit1;
i++;
}
else if(a[i]=='/')
{
st[++top]=infinit2;
i++;
}
else if('0'<=a[i] and a[i]<='9')
{
numar=0;
gata=0;
while('0'<=a[i] and a[i]<='9')
{
numar=numar*10+a[i]-'0';
i++;
}
if(semn==-1)
{
numar=numar*semn;
semn=1;
}
while(top>0 and st[top]==infinit1)
{
top--;
gata=1;
numar*=st[top];
}
while(top>0 and st[top]==infinit2)
{
top--;
numar=st[top]/numar;
gata=1;
}
if(gata==1)
st[top]=numar;
else st[++top]=numar;
}
else if(a[i]==')')
{
numar=0;
gata=0;
while(st[top]!=infinit)
{
numar+=st[top];
top--;
}
if(semn==-2)
{
numar*=-1;
semn=1;
}
while(top>0 and st[top]==infinit1)
{
top--;
numar*=st[top];
gata=1;
}
while(top>0 and st[top]==infinit2)
{
top--;
gata=1;
numar=st[top]/numar;
}
if(gata==1)
st[top]=numar;
else st[++top]=numar;
i++;
}
}
x=0;
for(i=1;i<=top;i++)
if(st[i]!=infinit and st[i]!=infinit1 and st[i]!=infinit2)
x+=st[i];
fout<<x<<"\n";
}
int main()
{
Rezolvare();
return 0;
}