Pagini recente » Cod sursa (job #1366177) | Cod sursa (job #2175521) | Cod sursa (job #1358460) | Cod sursa (job #3281274) | Cod sursa (job #2792993)
#include <bits/stdc++.h>
#define paranteza 1000000001 /// (
#define inmultire 1000000003 /// *
#define minuss 1000000002 /// -
#define impartire 1000000004 /// /
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int st[100005];
int top, nr;
char c[100005];
int main()
{
fin >> c;
for(int i=0; c[i]!=0;)
{
if(c[i]=='(')
{
st[++top]=paranteza;
i++;
}
if(c[i]=='+')
{
i++;
}
if(c[i]=='-')
{
st[++top]=minuss;
i++;
}
if(c[i]=='*')
{
st[++top]=inmultire;
i++;
}
if(c[i]=='/')
{
st[++top]=impartire;
i++;
}
if(isdigit(c[i]))
{
nr=0;
while(isdigit(c[i]))
{
nr=nr*10+(c[i]-'0');
i++;
}
if(st[top]==minuss)
{
nr=-nr;
top--;
}
while(st[top]==inmultire && top>0)
{
top--;
nr=nr*st[top];
top--;
}
while(st[top]==impartire && top>0)
{
top--;
nr=st[top]/nr;
top--;
}
st[++top]=nr;
}
if(c[i]==')')
{
nr=0;
while(st[top]!=paranteza && top>0)
{
nr+=st[top];
top--;
}
top--;
while(st[top]==inmultire && top>0)
{
top--;
nr=nr*st[top];
top--;
}
while(st[top]==impartire && top>0)
{
top--;
nr=st[top]/nr;
top--;
}
if(st[top]==minuss)
{
nr=-nr;
top--;
}
st[++top]=nr;
i++;
}
}
nr=0;
for(int i=1; i<=top; i++)
{
nr+=st[i];
}
fout << nr;
return 0;
}