Pagini recente » Cod sursa (job #2355821) | Cod sursa (job #1770498) | Cod sursa (job #1256057) | Cod sursa (job #1172759) | Cod sursa (job #1871293)
#include <fstream>
#include <cstring>
#define Nmax 100002
using namespace std;
ifstream f("evaluare.in");
ofstream g("evaluare.out");
int n,st[Nmax],nr;
bool sgn[Nmax];
char s[Nmax];
void calc(int st[],bool sgn[],int &nr)
{
int aux[Nmax],lg=0;
bool sgn2[Nmax];
while ((sgn[nr]!=1 || st[nr]!=5) && nr>=1)
{
aux[++lg] = st[nr];
sgn2[lg] = sgn[nr];
nr--;
}
while (lg>=1)
{
if (sgn2[lg]==1 && aux[lg]==3)
st[nr] *= aux[--lg];
else if (sgn2[lg]==1 && aux[lg]==4)
st[nr] /= aux[--lg];
else
{
st[++nr] = aux[lg];
sgn[nr] = sgn2[lg];
}
lg--;
}
while ((sgn[nr]!=1 || st[nr]!=5) && nr>=1)
{
aux[++lg] = st[nr];
sgn2[lg] = sgn[nr];
nr--;
}
if (nr>=1)
nr--;
while (lg>=1)
{
if (sgn2[lg]==1 && aux[lg]==1)
st[nr] += aux[--lg];
else if (sgn2[lg]==1 && aux[lg]==2)
st[nr] -= aux[--lg];
else
{
st[++nr] = aux[lg];
sgn[nr] = sgn2[lg];
}
lg--;
}
}
int main()
{
f>>s;
int n = strlen(s);
for (int i=0;i<n;i++)
{
if (s[i]>='0' && s[i]<='9')
{
int x = 0;
while (s[i]>='0' && s[i]<='9')
{
x = x * 10 + s[i] - '0';
i++;
}
st[++nr] = x;
sgn[nr] = 0;
i--;
}
else if (s[i]=='+')
{
st[++nr] = 1;
sgn[nr] = 1;
}
else if (s[i]=='-')
{
st[++nr] = 2;
sgn[nr] = 1;
}
else if (s[i]=='*')
{
st[++nr] = 3;
sgn[nr] = 1;
}
else if (s[i]=='/')
{
st[++nr] = 4;
sgn[nr] = 1;
}
else if (s[i]=='(')
{
st[++nr] = 5;
sgn[nr] = 1;
}
else if (s[i]==')')
{
calc(st,sgn,nr);
}
}
calc(st,sgn,nr);
g<<st[1]<<'\n';
return 0;
}