Pagini recente » Cod sursa (job #483535) | Cod sursa (job #2415928) | Cod sursa (job #831406) | Cod sursa (job #127442) | Cod sursa (job #1636293)
#include <fstream>
#include <string.h>
#define nMax 100005
using namespace std;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
int ok, nr, number[nMax], nrnb, signs[nMax], nrsgn, a, b, m, pr[300];
char S[nMax], ch;
void read()
{
fin>>S+1;
m=strlen(S+1);
}
int calcul(int a, int b, char ch)
{
switch(ch)
{
case '+':return a+b;break;
case '-':return a-b;break;
case '*':return a*b;break;
case '/':return a/b;break;
}
}
void solve()
{
pr['(']=pr[')']=0;
pr['-']=pr['+']=1;
pr['*']=pr['/']=2;
for(int i=1;i<=m;i++)
{
if(S[i]>='0'&&S[i]<='9')
{
ok=1;
nr=nr*10+S[i]-'0';
}
else
{
if(ok==1)
{
number[++nrnb]=nr;
ok=0;
nr=0;
}
if(S[i]=='(')
{
signs[++nrsgn]=S[i];
}
else
{
if(S[i]==')')
{
while(signs[nrsgn]!='(')
{
ch=signs[nrsgn--];
b=number[nrnb--];
a=number[nrnb];
number[nrnb]=calcul(a, b, ch);
}
nrsgn--;
}
else
{
while(pr[signs[nrsgn]]>=pr[S[i]])
{
ch=signs[nrsgn--];
b=number[nrnb--];
a=number[nrnb];
number[nrnb]=calcul(a, b, ch);
}
signs[++nrsgn]=S[i];
}
}
}
}
if(ok==1)
{
number[++nrnb]=nr;
ok=0;
nr=0;
}
while(nrsgn>0)
{
ch=signs[nrsgn--];
b=number[nrnb--];
a=number[nrnb];
number[nrnb]=calcul(a, b, ch);
}
}
void write()
{
fout<<number[1];
}
int main()
{
read();
solve();
write();
return 0;
}