Input
Integer is the first line,the number of the test caseis t.
Following t lines, each line is a string whose length does not exceed 100, representing a Postfix expression. Expression containing only +,-, *,/four operators and the 26 lowercase letters of the alphabet, does not contain other characters. Each letter represents a positive integer:
a = 1,b = 2,c = 3…y = 25,z = 26.
Output
Each input sample, single line output: Postfix expression value, a positive real number s, to two decimal places.
Case
Sample Input
2
ab+c*
int**py++
Sample Output
9.00
2561.00
Using the stack
to solve the problem,if the traverse run into the letters, then push into the stack
,otherwise, let the top element in the stack
make the operations to the next letter,then push the result into thestack
.
Finally,output the number with two decimal places, using fixed
and setprecision(2)
.
code (Hope have a help to you)
#include<iostream>
#include<string>
#include<stack>
#include <iomanip>
using namespace std;
int main() {
int n;
cin >> n;
while (n--) {
stack<float> temp;
string str;
cin >> str;
int size = str.length();
for (int i = 0; i < size; i++) {
if (str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/') {
float a = temp.top();
temp.pop();
float b = temp.top();
temp.pop();
if (str[i] == '+') {
b += a;
temp.push(b);
} else if (str[i] == '-') {
b -= a;
temp.push(b);
} else if (str[i] == '*') {
b *= a;
temp.push(b);
} else if (str[i] == '/') {
b /= a;
temp.push(b);
}
} else {
temp.push(str[i]-'a'+1);
}
}
cout<<fixed<<setprecision(2)<<temp.top()<<endl;
}
}