输入:逆波兰表达式( + - * )
输出:计算结果
输入的表达式需要考虑 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.输出格式要在输出结果后输出换行符