天天写算法之简单计算器(栈的应用)

记录一下,当时写的时候还是不知道如何下手,感觉卡了半天,都学过好几次了。
代码如下:

#include<iostream>
#include<cstdio>
#include<queue>
#include<stack>
#include<string.h>
using namespace std;
#define MAX 210
int T;

int main(){
   char s[MAX];
   int i,j;
   double last,now,ans ;
   stack<double> numQE;
   while(gets(s),strcmp(s,"0"))
   {
       ans = 0 ;
       int len =strlen(s);
       char lastOperator=' ';
       for(i = 0 ; i <len ; i++)
       {
           if(s[i]==' ')
           continue ;
           if(s[i]=='*'||s[i]=='/')
           {
               last = numQE.top();
               numQE.pop();
                now =0 ;
               for(j = i+2 ; j <len ;j++)
               {
                    if(s[j]!=' ')
                        now = now*10+(s[j]-'0');
                    else
                        break ;
                }
                if(s[i]=='*')
                    numQE.push(now*last);
                else
                    numQE.push(last/now);
                i = j;
               lastOperator=s[i];

           }
           else if(s[i]=='+'||s[i]=='-')
           {
                lastOperator=s[i];
           }else{
                double  res =0 ;
                for(j = i ; j <len ;j++)
                {
                    if(s[j]!=' ')
                        res = res*10+(s[j]-'0');
                    else
                        break ;
                }
                if(lastOperator=='-')
                    numQE.push(-res);
                else
                    numQE.push(res);
                i = j;
           }
       }
       while(!numQE.empty())
       {
               ans+=numQE.top();
               numQE.pop();
       }
        printf("%.2lf\n",ans);
   }
}

猜你喜欢

转载自blog.csdn.net/qq_36616268/article/details/80045272