Pagini recente » Cod sursa (job #1423953) | Cod sursa (job #598409) | Cod sursa (job #1641654) | Cod sursa (job #398811) | Cod sursa (job #1857204)
#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;
fin>>a;
semn=1;
top=0;
for(i=0;a[i]!=0;)
{
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(a[i]=='-')
{
st[++top]=-111111111;
i++;
}
else if('0'<=a[i] and a[i]<='9')
{
numar=0;
while('0'<=a[i] and a[i]<='9')
{
numar=numar*10+a[i]-'0';
i++;
}
if(st[top]==-111111111)
{
numar*=-1;
top--;
}
while(top>0 and st[top]==infinit1)
{
top--;
numar*=st[top];
top--;
}
while(top>0 and st[top]==infinit2)
{
top--;
numar=st[top]/numar;
top--;
}
st[++top]=numar;
}
else if(a[i]==')')
{
numar=0;
while(st[top]!=infinit && top>0)
{
numar+=st[top];
top--;
}
top--;
while(top>0 && st[top]==infinit1)
{
top--;
numar*=st[top];
top--;
}
while(top>0 && st[top]==infinit2)
{
top--;
numar=st[top]/numar;
top--;
}
if(st[top]==-111111111)
{
numar*=-1;
top--;
}
st[++top]=numar;
i++;
}
}
numar=0;
for(i=1;i<=top;i++)
numar+=st[i];
fout<<numar<<"\n";
}
int main()
{
Rezolvare();
return 0;
}