#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
long long flag=0;//废弃数据
long long flag_1=0;//用于在第一次计算符号前先给ans赋值
long long ans;//为结果
char tmp;//当前输入的单个字符
char math[1002];//废弃数据
long long mat[1002]={0};//这个数组是记录数字结果用的。
long long temp=0;//这个值是作为输入数据时的形参
long long i=0,j=0;//i是被定义为类似于指针的形参
while(scanf("%c",&tmp)==1)
{
if(tmp<='9'&&tmp>='0')
{
temp=temp*10+tmp-'0';
//此处是输入数据
}
if(tmp==' ')//每一处空格就记录结果
{
mat[i]=temp;
i++;
temp=0;
}
if(tmp=='+'||tmp=='-'||tmp=='*'||tmp=='/')//判断当前输入值是否是符号
{
if(flag_1==0)//第一次计算符号前先给ans赋值
{
i--;
ans=mat[i];
flag_1=1;
}
if(flag_1==1)
{
switch(tmp)//检测到符号以后符号计算
{
case '+':i--;ans+=mat[i];break;
case '-':i--;ans=mat[i]-ans;break;
case '*':i--;ans*=mat[i];break;
case '/':i--;ans=mat[i]/ans;break;
}
}
}
if(tmp=='@')
{
break;//保证检测到@的时候就退出循环
}
}
cout<<ans;//输出ans
}
这里是信息学奥赛一本通第1331题《后缀表达式的值》的题解。
使用栈的思想但未使用模板。