逆波蘭表示發是一種將運算符寫在操作數后面的描述程序(算式)的方法。舉個例子,我們平常用中綴表示法描述的算式(1 + 2) * (5 + 4),改為逆波蘭表示法之后則是1 2 + 5 4 + *。相較於中綴表示法,逆波蘭表示法的優勢在於不需要括號。
請輸出以逆波蘭表示法輸入的算式的計算結果。
輸入 在1行中輸入1個算式。相鄰的符號(操作數或運算符)用1個空格隔開。
輸出 在1行之中輸出計算結果。
限制 2≤算式中操作數的總數≤100
1≤算式中運算符的總數≤99
運算符僅包括“+” “-” “*”,操作數為106以下的正整數。
-1×109≤計算過程中的值≤109
輸入示例
1 2 + 3 4 - *
輸出示例
-3
參考代碼:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int top, S[1000]; 5 6 void push(int x) { 7 S[++top] = x; 8 } 9 10 int pop() { 11 top--; 12 return S[top + 1]; 13 } 14 15 int main() { 16 int a, b; 17 top = 0; 18 char s[100]; 19 while (scanf("%s", s) != EOF) { 20 if (s[0] == '+') { 21 a = pop(); 22 b = pop(); 23 push(a + b); 24 } 25 else if (s[0] == '-') { 26 a = pop(); 27 b = pop(); 28 push(a - b); 29 } 30 else if(s[0] == '*'){ 31 a = pop(); 32 b = pop(); 33 push(a * b); 34 } 35 else { 36 push(atoi(s)); 37 } 38 } 39 printf("%d\n", pop()); 40 41 return 0; 42 }