#include #include #include #include #include #include #include #include #include using namespace std; typedef pair< int, pair > term; typedef vector< term > value; #define A second.first #define B second.second #define R first void simplify( term &t ) { if( t. } string string_of_term( term &t ) { int a = t.A, b = t.B, r = t.R; char buf[32]; string r; if( r > 1 ){ if( a == 1 && b == 1 ) sprintf( buf, "sqrt(%d)", r ); else if( a == -1 && b == 1 ) sprintf( buf, "-sqrt(%d)", r ); else if( b == 1 ) sprintf( buf, "%d*sqrt(%d)", a, r ); else sprintf( buf, "%d/%d*sqrt(%d)", a, b, r ); } else{ if( b == 1 ) sprintf( buf, "%d", a ); else sprintf( buf, "%d/%d", a ); } return buf; } int main( void ) { FILE *in = fopen( "sqrt.in", "r" ); vector< int > vs; enum{ ADD, SUB, MUL, DIV, SQRT, DISP, INT }; char com[1024]; /* vector< pair< int, pair > > stack; x1.insert( x1.end(), x2.begin(), x2.end() ); simplify_value( x1 ); push( x1 ); break; } else if( strcmp( com, "sub" ) == 0 ){ vector< term > x2 = pop(); vector< term > x1 = pop(); int n = x1.size(); x1.insert( x1.end(), x2.begin(), x2.end() ); for( int i = 0; i < x2.size(); i ++ ) x1[i+n].A *= -1; simplify_value( x1 ); push( x1 ); break; } else if( strcmp( com, "mul" ) == 0 ){ vector< term > x1 = pop(); vector< term > x2 = pop(); int n = x1.size(); x1.insert( x1.end(), x2.begin(), x2.end() ); for( int i = 0; i < x2.size(); i ++ ) x1[i+n].A *= -1; simplify_value( x1 ); push( x1 ); break; } if( strcmp( com, "stop" ) == 0 ) break; if( strcmp( com, "stop" ) == 0 ) break; while( 1 ){ fscanf( in, "%s", com ); if( strcmp( com, "stop" ) == 0 ) break; else if( strcmp( com, "push" ) == 0 ){ int i; fscanf( in, "%d", &i ); break; } else if( strcmp( com, "add" ) == 0 ){ vector< term > x1 = pop(); vector< term > x2 = pop(); x1.insert( x1.end(), x2.begin(), x2.end() ); simplify_value( x1 ); push( x1 ); break; } else if( strcmp( com, "sub" ) == 0 ){ vector< term > x2 = pop(); vector< term > x1 = pop(); int n = x1.size(); x1.insert( x1.end(), x2.begin(), x2.end() ); for( int i = 0; i < x2.size(); i ++ ) x1[i+n].A *= -1; simplify_value( x1 ); push( x1 ); break; } else if( strcmp( com, "mul" ) == 0 ){ vector< term > x1 = pop(); vector< term > x2 = pop(); int n = x1.size(); x1.insert( x1.end(), x2.begin(), x2.end() ); for( int i = 0; i < x2.size(); i ++ ) x1[i+n].A *= -1; simplify_value( x1 ); push( x1 ); break; } if( strcmp( com, "stop" ) == 0 ) break; if( strcmp( com, "stop" ) == 0 ) break; while( 1 ){ fscanf( in, "%s", com ); if( strcmp( com, "stop" ) == 0 ) break; else if( strcmp( com, "push" ) == 0 ) int i; fscanf( in, "%d", &i ); vs.push( stack.size() ); stack.push_back( pair< int, pair >( INT, pair(i,i) ) ); break; } else if( strcmp( com, "add" ) == 0 ){ int x1 = vs.pop_back(); int x2 = vs.pop_back(); vs.push( stack.size() ); stack.push( pair< int, pair >( ADD, pair(x2,x1) ) ); break; } else if( strcmp( com, "sub" ) == 0 ){ int x1 = vs.pop_back(); int x2 = vs.pop_back(); vs.push( stack.size() ); stack.push( pair< int, pair >( SUB, pair(x2,x1) ) ); break; } else if( strcmp( com, "mul" ) == 0 ){ int x1 = vs.pop_back(); int x2 = vs.pop_back(); vs.push( stack.size() ); stack.push( pair< int, pair >( MUL, pair(x2,x1) ) ); break; } else if( strcmp( com, "div" ) == 0 ){ int x1 = vs.pop_back(); int x2 = vs.pop_back(); vs.push( stack.size() ); stack.push( pair< int, pair >( DIV, pair(x2,x1) ) ); break; } else if( strcmp( com, "sqrt" ) == 0 ){ int x1 = vs.pop_back(); vs.push( stack.size() ); stack.push( pair< int, pair >( DIV, pair(x1,x1) ) ); break; } else if( strcmp( com, "disp" ) == 0 ){ int x1 = vs.pop_back(); print( x1 ); break; } } */ return 0; }