Pagini recente » Cod sursa (job #2925288) | Cod sursa (job #1234350) | Rating Cristina (Oleaginoasa) | Cod sursa (job #1600589) | Cod sursa (job #1905501)
#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]=='(')
{
st[++t]=paran;
i++;
}
if (a[i]=='+')
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--;
}
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;
i++;
}
}
x=0;
for (i=1; i<=t; i++)
x+=st[i];
fout << x << "\n";
}
int main()
{
fin >> a;
Rezolvare();
return 0;
}