逆波兰表达式求值
逆波兰表示法是一种将运算符(operator)写在操作数(operand)后面的描述程序(算式)的方法。举个例子,我们平常用中缀表示法描述的算式(1 + 2)*(5 + 4),改为逆波兰表示法之后则是1 2 + 5 4 + *。相较于中缀表示法,逆波兰表示法的优势在于不需要括号。
请输出以逆波兰表示法输入的算式的计算结果。
输入格式:
在一行中输入1个算式。相邻的符号(操作数或运算符)用1个空格隔开。
输出格式:
在一行中输出计算结果。
限制:
2≤算式中操作数的总数≤100
1≤算式中运算符的总数≤99
运算符仅包括“+”、“-”、“*”,操作数、计算过程中的值以及最终的计算结果均在int范围内。
输入样例1:
4 3 + 2 -
输出样例1:
5
输入样例2:
1 2 + 3 4 - *
输出样例2:
-3
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int main() 5 { 6 char str[105]; 7 stack<int>s; 8 int a,b; 9 while(~scanf("%s",str)) 10 { 11 if(str[0]=='+') 12 { 13 a=s.top(); 14 s.pop(); 15 b=s.top(); 16 s.pop(); 17 s.push(a+b); 18 } 19 else if(str[0]=='-') 20 { 21 a=s.top(); 22 s.pop(); 23 b=s.top(); 24 s.pop(); 25 s.push(b-a); 26 } 27 else if(str[0]=='*') 28 { 29 a=s.top(); 30 s.pop(); 31 b=s.top(); 32 s.pop(); 33 s.push(a*b); 34 } 35 else 36 { 37 a=atoi(str); 38 s.push(a); 39 } 40 } 41 cout<<s.top(); 42 return 0; 43 }
浙公网安备 33010602011771号