Pagini recente » Cod sursa (job #2767505) | Cod sursa (job #2227023) | Cod sursa (job #1770834) | Cod sursa (job #2768661) | Cod sursa (job #1905541)
#include <bits/stdc++.h>
#define paran 1000000001 /// (
#define minu 1000000002 /// -
#define impartire 1000000003 /// /
#define inmultire 1000000004 /// *
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
char a[100007];
int st[100007], t;
void Rezolvare()
{
int i, x;
for (i=0; a[i]!=0; )
{
if (a[i]=='+')
i++;
if (a[i]=='(')
{
st[++t]=paran;
i++;
}
if (a[i]=='-')
{
st[++t]=minu;
i++;
}
if (a[i]=='/')
{
st[++t]=impartire;
i++;
}
if (a[i]=='*')
{
st[++t]=inmultire;
i++;
}
if (a[i]>='0' && a[i]<='9')
{
x=0;
while (a[i]>='0' && a[i]<='9')
{
x=x*10+a[i]-'0';
i++;
}
if (st[t]==minu)
{
x*=(-1);
t--;
}
while (st[t]==inmultire && t>0)
{
t--;
x=x*st[t];
t--;
}
while (st[t]==impartire && t>0)
{
t--;
x=st[t]/x;
t--;
}
st[++t]=x;
}
if (a[i]==')')
{
x=0;
while (st[t]!=paran && t>0)
{
x+=st[t];
t--;
}
t--;
while (st[t]==inmultire && t>0)
{
t--;
x=x*st[t];
t--;
}
while (st[t]==impartire && t>0)
{
t--;
x=st[t]/x;
t--;
}
if (st[t]==minu)
{
x*=(-1);
t--;
}
st[++t]=x;
i++;
}
}
x=0;
for (i=1; i<=t; i++)
x+=st[i];
fout << x << "\n";
}
int main()
{
fin >> a;
Rezolvare();
fin.close();
fout.close();
return 0;
}