Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
162549 | 梁乃元 | 后序表达式 | C++ | 运行超时 | 0 | 1000 MS | 256 KB | 1441 | 2024-08-07 22:03:32 |
# include <bits/stdc++.h> using namespace std ; stack <double> num ; stack <char> op ; void cal ( ) { double a = num . top ( ) ; num . pop ( ) ; double b = num . top ( ) ; num . pop ( ) ; char c = op . top ( ) ; op . pop ( ) ; switch ( c ) { case '+' : { num . push ( b + a ) ; } case '-' : { num . push ( b - a ) ; } case '*' : { num . push ( b * a ) ; } case '/' : { num . push ( b / a ) ; } } } int h ( char op ) { if ( op == '(' ) { return 0 ; } else if ( op == '+' || op == '-' ) { return 1 ; } else if ( op == '*' || op == '/' ) { return 2 ; } return 3 ; } int main ( ) { string s ; getline ( cin , s ) ; for ( int i = 0 ; i < s . size ( ) ; i ++ ) { if ( isdigit ( s [i] ) ) { int tmp = s [i] - '0' , j = i ; while ( isdigit ( s [j + 1] ) && j < s . size ( ) ) { j ++ ; tmp *= 10 ; tmp += s [i] - '0' ; } i = j - 1 ; } else if ( s [i] == '(' ) { op . push( s [i] ) ; } else if ( s [i] == ')' ) { while ( op . top ( ) != '(' ) { cal ( ) ; } op . pop ( ) ; } else { while ( ! op . empty ( ) && h ( op . top ( ) ) > h ( s [i] ) ) { cal ( ) ; } op . push ( s [i] ) ; } } while ( ! op . empty ( ) ) { cal ( ) ; } cout << fixed << setprecision ( 2 ) << num . top ( ) << endl ; return 0 ; }