原题传送门
思路:定义一个来存放int型的栈,然后将输入的数据转换后存入栈中,但是以运算符号为分割,先进第一个数,再进第二个数,接着将后进的数先抛出,此时先进的数就是栈顶元素了,然后将这两个数做运算后再将第一个数抛出以及将运算结果sum压入栈中,以此循环即可。
代码参考
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1001;
char a[MAXN];
int sum,k;
stack <int> stk;
int main(){
gets(a);
for(int i=0;a[i]!='@';i++)
{
if(a[i]=='.')
{
sum=0,k=1;
//将数据转换后存入栈中
for(int j=i-1;j>=0&&a[j]>='0'&&a[j]<='9';j--){
sum=sum+(a[j]-'0')*k;
k*=10;
}
stk.push(sum);
continue;
}
if(a[i]>='0' && a[i]<='9')
continue;
sum=stk.top();//栈顶元素
stk.pop();//弹出栈顶元素
if(a[i]=='+') sum=stk.top()+sum;
if(a[i]=='-') sum=stk.top()-sum;
if(a[i]=='*') sum=stk.top()*sum;
if(a[i]=='/') sum=stk.top()/sum;
stk.pop();
stk.push(sum);//将sum压入栈中
}
cout<<sum<<endl;
return 0;
}