利用棧完成後綴表示式的計算
阿新 • • 發佈:2019-01-04
字尾表示式不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則,如:(2 + 1) * 3 , 即2 1 + 3 *。利用棧結構,將字尾表示式的結果計算出來。
輸入
字尾表示式。以#號作為表示式結束標誌。為了簡單,處理的資料為0-9的整數。
輸出
計算結果。
樣例輸入
3 6 6 2 / - 3 * +#
樣例輸出
12
#include<stdio.h> #include<math.h> #include<string.h> #include<algorithm> #include<iostream> #include<queue> #include<cstdlib> #include<stack> using namespace std; typedef int ElemType; int main() { stack<int>s; char a[1001]; int n; for (n = 0;; n++) { scanf("%c", &a[n]); if (a[n] == '#')break; } for (int i = 0; i < n; i++) { if (a[i] >= '0'&&a[i] <= '9') s.push(a[i] - '0'); else { if (a[i] == ' ')continue; if (a[i] == '-') { int b = s.top(); s.pop(); int a = s.top(); s.pop(); int sum = a - b; s.push(sum); } if (a[i] == '+') { int b = s.top(); s.pop(); int a = s.top(); s.pop(); int sum = a + b; s.push(sum); } if (a[i] == '/') { int b = s.top(); s.pop(); int a = s.top(); s.pop(); int sum = a / b; s.push(sum); } if (a[i] == '*') { int b = s.top(); s.pop(); int a = s.top(); s.pop(); int sum = a * b; s.push(sum); } } } cout << s.top(); s.pop(); return 0; }