Pagini recente » Cod sursa (job #672357) | Cod sursa (job #1464158) | Cod sursa (job #1307033) | Cod sursa (job #2069877) | Cod sursa (job #2562485)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 100004;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
stack < int > S;
char C[NMAX];
int pi = 2000000000, x;
int pl = pi+1;
int m = pi-1;
int sup = pi-2;
int ori = pi+2;
int NR( int &i )
{
int nr = 0;
while( C[i] >= '0' && C[i] <= '9' )
{
nr = nr*10 + C[i]-'0';
i++;
}
i--;
return nr;
}
void Evaluare()
{
int x = S.top();
S.pop();
while( S.size() && S.top() != pi )
{
if( S.top() == pl )
S.pop();
else if( S.top() == m )
{
x = -x;
S.pop();
}
else
{
x += S.top();
S.pop();
}
}
if( S.size() )S.pop();
S.push( x );
}
void Read()
{
fin >> C;
for( int i = 0; C[i]; ++i )
{
if( C[i] == '(')
S.push(pi);
if( C[i] >= '0' && C[i] <= '9' )
{
x = NR( i );
if( S.top() == sup )
{
S.pop();
x = S.top()/x;
S.pop();
}
if( S.top() == ori )
{
S.pop();
x = S.top()*x;
S.pop();
}
S.push( x );
}
if( C[i] == '+')
S.push(pl);
if( C[i] == '-')
S.push(m);
if( C[i] == '/' )
S.push( sup );
if( C[i] == '*' )
S.push( ori );
if( C[i] == ')' )
Evaluare();
}
Evaluare();
fout << S.top() << '\n';
}
int main()
{
Read();
return 0;
}