为了简单,此题目设计时限定所有数字均小于10。
解题思路:逆波兰式即后缀表达式,是栈结构的典型应用之一。
在扫描字符串的过程中,只有两种处理方式,数字入栈,运算符出栈顶两个元素,计算结果入栈。
#include <iostream>
#include <stack>
using namespace std;
string s;
stack <long long> st;/**< STL提供的栈结构 */
int main()
{
long long i,j,x1,x2;
getline(cin,s);/**< 使用string类型读取一行,如果是用c语言等价于: char s[100]; gets(s)*/
i=0;
while(s[i]!='@')
{ /**< 三种情况,数字,运算符,其他 */
if(isdigit(s[i]))
st.push(s[i]-'0');
else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')
{
x2=st.top();st.pop();x1=st.top();st.pop();/**< 出2个,注意次序 */
switch(s[i])
{
case '+':st.push(x1+x2);break;/**< 结果进栈 */
case '-':st.push(x1-x2);break;
case '*':st.push(x1*x2);break;
case '/':st.push(x1/x2);break;
}
}
i++;
}
cout<<st.top();
return 0;
}