题目其实很简单的啦,要注意的是输出格式,还有要仔细。。 我就两个都错了,结果WA三次才AC! #include <cstdio> #include <cstring> #include <cstdlib> using namespace std; const int MAX = 10; typedef struct _Node { int data[MAX+10]; }Node; void NodeInit( Node& left ) { memset( &left , 0 , sizeof( Node ) ); } void NodeAdd( Node& left , const Node& mid ) { for( int i = 0 ; i <= MAX ; ++i ) left.data[i] += mid.data[i]; } void NodeMulti( Node& left , char* mid ) { if( mid[0] == 'n' ) { for( int i = MAX ; i > 0 ; --i ) left.data[i] = left.data[i-1]; left.data[0] = 0 ; } else { int number = atoi( mid ); for( int i = 0 ; i <= MAX ; ++i ) left.data[i] *= number; } } void NodeOutput( const Node& left ) { bool isempty = true; bool havenumber; bool haven; bool haveexp; for( int i = MAX ; i >= 0 ; --i ) if( left.data[i] != 0 ) { havenumber = ( left.data[i] != 1 || i == 0 ) ; haven = ( i != 0 ); haveexp = ( i > 1 ); if( !isempty ) printf("+"); if( havenumber ) printf("%d",left.data[i]); if( havenumber && haven ) printf("*"); if( haven ) printf("n"); if( haveexp ) printf("^%d",i); isempty = false; } if( isempty ) printf("0"); printf("/n"); } Node find() { char buffer[128],buffer2[128]; Node cur,mid; NodeInit( cur ); while( scanf("%s",buffer ) , strcmp( buffer , "END" ) != 0 ) { scanf("%s",buffer2); if( strcmp( buffer , "OP") == 0 ) cur.data[0] += atoi(buffer2); else { mid = find(); NodeMulti( mid , buffer2 ); NodeAdd( cur , mid ); } } return cur; } int main() { int n; Node result; char buffer[1024]; scanf("%d",&n); for( int i = 1 ; i <= n ; ++i ) { scanf("%s",buffer); result = find(); printf("Program #%d/n",i); printf("Runtime = "); NodeOutput( result ); printf("/n"); } return 0; }