Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
161768 | 梁乃元 | 后序表达式 | C++ | 运行超时 | 0 | 1000 MS | 248 KB | 1385 | 2024-08-05 21:40:17 |
# 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 ( a + b ) ; } case '-' : { num . push ( a - b ) ; } case '*' : { num . push ( a * b ) ; } case '/' : { num . push ( a / b ) ; } } } int h ( char op ) { if ( op == '(' ) { return 0 ; } else if ( op == '+' || op == '-' ) { return 1 ; } else { return 2 ; } } int main ( ) { string s ; getline ( cin , s ) ; for ( int i = 0 ; i < s . size ( ) ; i ++ ) { if ( isdigit ( s [i] ) ) { int tmp = s [i] - '0' ; while ( isdigit ( s [i + 1] ) && i < s . size ( ) ) { i ++ ; tmp *= 10 ; tmp += s [i] - '0' ; } i -- ; } 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 ; }