Pagini recente » Cod sursa (job #336816) | Cod sursa (job #2896525) | Cod sursa (job #585562) | Cod sursa (job #1623572) | Cod sursa (job #853049)
Cod sursa(job #853049)
#include <fstream>
using namespace std;
ifstream f ( "evaluare.in" );
ofstream g ( "evaluare.out" );
#define LE 100666
#include <string>
string s;
int N;
int i, K;
int EXP[LE], stiv[LE];
int top;
int val;
int level ( char A )
{
if ( A == '(' || A == ')' )
return A == '(' ? -1 : -2;
if ( A == '+' || A == '-' )
return A == '+' ? -3 : -4;
return A == '*' ? -5 : -6;
}
int main()
{
f >> s;
N = s.length();
for ( ; i < N; )
if ( s[i] >= '0' && s[i] <= '9' )
{
for ( val = 0; i < N && s[i] >= '0' && s[i] <= '9' ; ++i )
val = val * 10 + ( s[i] - '0' );
EXP[++K] = val ;
}
else
{
int lev = level ( s[i++] ) ;
if ( lev == -2 )
{
while ( top && stiv[top] != -1 )
EXP[++K] = stiv[top--] ;
--top;
}
else if ( lev == -1 )
stiv[++top] = -1;
else
{
while ( top && stiv[top] <= lev )
EXP[++K] = stiv[top--] ;
stiv[++top] = lev;
}
}
for ( ; top; --top )
EXP[++K] = stiv[top] ;
top = 0;
for ( i = 1; i <= K; ++i )
if ( EXP[i] < 0 )
{
if ( EXP[i] == -3 )
EXP[top-1] += EXP[top];
if ( EXP[i] == -4 )
EXP[top-1] -= EXP[top];
if ( EXP[i] == -5 )
EXP[top-1] *= EXP[top];
if ( EXP[i] == -6 )
EXP[top-1] /= EXP[top];
--top;
}
else
EXP[++top] = EXP[i];
g << EXP[1];
f.close();
g.close();
return 0;
}