Pagini recente » Cod sursa (job #1341134) | Cod sursa (job #864712) | Cod sursa (job #643812) | Cod sursa (job #1010170) | Cod sursa (job #371621)
Cod sursa(job #371621)
#include<cstdio>
#include<cstring>
#define LMAX 2
#define N (1<<17)
using namespace std;
char expresie[N];
char op[4][4]={"+-","*/",""};char *p;
struct node {
int val;
char op;
node *left, *right;
node( int a = 0, char b = 0, node *c = 0, node *d = 0 ) :
val(a), op(b), left(c), right(d) {}
} *A;
node *creare_arbore( int lev ) {
node *x, *y;
if( lev == LMAX )
if( *p == '(' )
++p, x = creare_arbore(0), ++p;
else
for( x = new node(); *p >= '0' && *p <= '9'; ++p )
x->val = x->val * 10 + *p - '0';
else
for( x = creare_arbore( lev+1 ); strchr( op[lev], *p ); x = y )
y = new node( 0, *p++, x, creare_arbore( lev+1 ) );
return x;
}
int eval( node *n ) {
switch( n->op ) {
case '+': return eval( n->left ) + eval( n->right );
case '-': return eval( n->left ) - eval( n->right );
case '*': return eval( n->left ) * eval( n->right );
case '/': return eval( n->left ) / eval( n->right );
default: return n->val;
}
}
int main()
{freopen( "evaluare.in", "r", stdin );
freopen( "evaluare.out", "w", stdout );
fgets( expresie, N, stdin ),
p = expresie;
A = creare_arbore( 0 );
printf( "%d\n", eval( A ) );
return 0;}