Description
来自USA的Mr.Allison是某班的英语老师,学期开始之前他要求自己班的同学阅读一本英文小说,并写一份50000字的读书报告。该班的同学很苦恼,并想方设法让Mr.Allison放弃读书笔记这个念头,于是该班的大牛PYY想到一个借口:看那么多份读书笔记会花费很多时间的!把这个理由告诉Mr.Allison之后,Mr.Allison也觉得挺有道理,但一共要阅读多少文字呢?于是PYY就给出一条后缀表达式,并告诉Mr.Allison说,这条表达式的结果就是您要阅读的文字。Mr.Allison的数学不咋地,于是就找你来帮他计算这条后缀表达式的值。
Input
第一行是一整数,即测试样例个数T.
以下T行,每一行是一个长度不超过100的字符串,代表一条后缀表达式。表达式中只含有+、-、*、/四种运算符和26个小写英文字母,不含其它字符。每一个英文字母代表一个正整数:
a = 1,b = 2,c = 3…y = 25,z = 26。
Output
每一个输入样例,单独一行输出结果:后缀表达式的值,一个正实数S,保留两位小数。
Sample Input
Copy sample input to clipboard
2
ab+c*
int**py++
Sample Output
9.00
2561.00
思路:还是要利用栈来解决问题。
1 #include <iostream> 2 #include <stack> 3 #include <string> 4 #include <cstring> 5 #include <cctype> 6 #include <iomanip> 7 #include <cstdio> 8 using namespace std; 9 int main() { 10 int N; 11 cin >> N; 12 while(N--) { 13 stack<double> letter; 14 string str; 15 cin >> str; 16 int size = str.size(); 17 for (int i = 0; i < size; i++) { 18 if (isalpha(str[i])) { 19 letter.push(str[i] - 'a' + 1); 20 } else { 21 if (str[i] == '+') { 22 double num1 = letter.top(); 23 letter.pop(); 24 double num2 = letter.top(); 25 letter.pop(); 26 letter.push(num1+num2); 27 } 28 if (str[i] == '-') { 29 double num1 = letter.top(); 30 letter.pop(); 31 double num2 = letter.top(); 32 letter.pop(); 33 letter.push(num2-num1); 34 } 35 if (str[i] == '*') { 36 double num1 = letter.top(); 37 letter.pop(); 38 double num2 = letter.top(); 39 letter.pop(); 40 letter.push(num1*num2); 41 } 42 if (str[i] == '/') { 43 double num1 = letter.top(); 44 letter.pop(); 45 double num2 = letter.top(); 46 letter.pop(); 47 letter.push(num2/num1); 48 } 49 } 50 } 51 cout << setprecision(2) << fixed << letter.top() << endl; 52 letter.pop(); 53 } 54 return 0; 55 }