输入:逆波兰表达式( + - * )
输出:计算结果
输入的表达式需要考虑 2位数甚至更多的情况,如果输入的是数字,则压入栈中,如果是运算符,则在栈中取出两个数字进行运算,最后将结果压入栈中。
Sample Input 1
1 2 +
Sample Output 1
3
Sample Input 2
1 2 + 3 4 - *
Sample Output 2
-3
注意:unix下文件结束标志是ctrl+d
win下文件结束标志是ctrl+z
#include <cstdio> #include <iostream> #include <string> #include <stack> #include <algorithm> using namespace std; int main (){ string s; stack<int> A; int a,b; while(cin>>s){ if(s[0]=='+'){ a=A.top();A.pop(); b=A.top();A.pop(); A.push(a+b); } else if(s[0]=='-'){ a=A.top();A.pop(); b=A.top();A.pop(); A.push(b-a); } else if(s[0]=='*'){ a=A.top();A.pop(); b=A.top();A.pop(); A.push(a*b); } else { A.push(atoi(s.c_str())); } } cout<<A.top()<<endl; return 0; }
错点:
1.运算减法时,应该是先进去的数减去后进去的数
2.s.c_str返回costchar*,即字符串数组,atoi用于将字符串直接转换为数字,如‘123’转换成123
3.输出格式要在输出结果后输出换行符