オリジナルタイトルポータル
アイデア:int型を格納するスタックを定義し、入力データを変換してスタックに格納しますが、算術記号で除算し、最初の数値を進めてから2番目の数値を入力し、最後の数値を最初にスローします。今回は、上位の数値がスタックの最上位要素となり、この2つの数値に対して演算を行った後、最初の数値が捨てられ、演算結果の合計がスタックにプッシュされ、ループすることができます。
コードリファレンス
#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;
}