信息学奥赛一本通t1331(by寺貍)

#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题《后缀表达式的值》的题解。
使用栈的思想但未使用模板。

posted @ 2019-07-23 11:04  東雲寺貍  阅读(205)  评论(0编辑  收藏  举报