Pagini recente » Cod sursa (job #794941) | Cod sursa (job #1527433) | Cod sursa (job #1232236) | Cod sursa (job #202518) | Cod sursa (job #2562571)
#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();
}
//cout << x << '\n';
}
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.size() && S.top() == sup )
{
S.pop();
x = S.top()/x;
S.pop();
}
if( S.size() && S.top() == ori )
{
S.pop();
x = S.top()*x;
S.pop();
}
else if( S.size() && S.top() == m )
{
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();
x = S.top();
S.pop();
if( S.size() && S.top() == ori )
{
S.pop();
x = x*S.top();
S.pop();
}
else if( S.size() && S.top() == sup )
{
S.pop();
x = S.top()/x;
S.pop();
}
else if( S.size() && S.top() == m )
{
S.pop();
x = S.top()-x;
S.pop();
}
S.push( x );
}
//cout << C[i] << ' ' << S.top() << '\n';
}
Evaluare();
fout << S.top() << '\n';
}
int main()
{
Read();
return 0;
}