逆波兰表示发是一种将运算符写在操作数后面的描述程序(算式)的方法。举个例子,我们平常用中缀表示法描述的算式(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 }