洛谷 1449(一道水题)

114 阅读1分钟

P1449 后缀表达式

  1. 思路:

    1. 看一眼题目之后,第一反应是:输入难搞,小数负数,怎么读入,在我以为又要处理输出的时候,看到了题目难度: 普及-,en....

    2. 使用stack存储数字,当遇到运算符的时候就弹出栈顶的两个数字,进行操作,把操作的结果在push近stack中,遇到@结束.

    3. 对,就是一个水题

      #include<iostream>
      #include<string>
      #include<stack>
      
      using namespace std;
      
      int opt(int a,int b,char c){
         switch (c){
         case '+':
            return a+b;
         case '-':
            return a-b;
         case '*':
            return a*b;
         default:
            return a/b;
         }
         return -1;
      }
      
      /*
         第一波,先不考虑复数和小数
      */
      int main(){
         // freopen("data.in","r",stdin);
         string ss;
         stack<int> s;
         cin>>ss;
         int t1=0,t2;
         for(int i=0;i<ss.length();i++){
            if(ss[i]=='@')
               break;
            if(ss[i]=='.'){
               // 一个数结束了
               s.push(t1);
               t1 = 0;
            }
            if(ss[i]=='+'||ss[i]=='-'||ss[i]=='*'||ss[i]=='/'){
               int a = s.top();
               s.pop();
               int b = s.top();
               s.pop();
               int c = opt(b,a,ss[i]);
               s.push(c);
            }
            if( ss[i]<='9'&&ss[i]>='0' )
               t1 = t1*10+ss[i]-'0';
         }
         cout<<s.top();
         return 0;
      }