224 Basic Calculator

224 Basic Calculator

链接:https://leetcode.com/problems/basic-calculator/
问题描述:
Implement a basic calculator to evaluate a simple expression string.

The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .

You may assume that the given expression is always valid.

Some examples:
“1 + 1” = 2
” 2-1 + 2 ” = 3
“(1+(4+5+2)-3)+(6+8)” = 23
Note: Do not use the eval built-in library function.

Hide Tags Stack Math

计算表达式,这一题是Basic Calculator II https://leetcode.com/problems/basic-calculator-ii/的简化版。

class Solution {
public:
    int calculate(string s) {
        stack<int> num;
        stack<char> oper;
        string expression="";
        for(int i=0;i<s.size();i++)
            {if(s[i]!=' ')
            expression+=s[i];
        }

        int temp=0;
        for(int i=0;i<expression.length();i++)
        {
           if(expression[i]-'0'<10&&expression[i]-'0'>-1)
                temp=temp*10+expression[i]-'0';
            else if(expression[i]=='(')
              oper.push(expression[i]);
           else 
           {
               if(expression[i]=='*'||expression[i]=='/')
               {    

                   if(!oper.empty()&&(oper.top()=='*'||oper.top()=='/'))
                 {
                   switch(oper.top())
                     {
                     case '*':temp=num.top()*temp;num.pop();oper.pop();break;
                     case '/':temp=num.top()/temp;num.pop();oper.pop();break;
                     default: break;
                     }

                 }

                  num.push(temp);
                  temp=0;
                  oper.push(expression[i]); 

               }
                else if(expression[i]=='+'||expression[i]=='-')
             {  
                 while(!oper.empty()&&(oper.top()=='+'||oper.top()=='-'||oper.top()=='*'||oper.top()=='/'))
                 {
                   switch(oper.top())
                     { 
                     case '*':temp=num.top()*temp;num.pop();oper.pop();break;
                     case '/':temp=num.top()/temp;num.pop();oper.pop();break;
                     case '+':temp=temp+num.top();num.pop();oper.pop();break;
                     case '-':temp=num.top()-temp;num.pop();oper.pop();break;
                     default: break;
                     } 
                 }
                 num.push(temp);
                 temp=0;
                 oper.push(expression[i]);  
             } 
               else if(expression[i]==')')
              {
                 while(oper.top()!='(')
                 {
                     switch(oper.top())
                     {
                     case '+':temp=temp+num.top();num.pop();break;
                     case '-':temp=num.top()-temp;num.pop();break;
                     case '*':temp=num.top()*temp;num.pop();break;
                     case '/':temp=num.top()/temp;num.pop();break;
                     default: break;
                     }
                     oper.pop();
                 }
                 oper.pop();
             }

           }
        }
        while(!oper.empty())
        {
              switch(oper.top())
            {
                case '+':temp=temp+num.top();num.pop();break;
                case '-':temp=num.top()-temp;num.pop();break;
                case '*':temp=num.top()*temp;num.pop();break;
                case '/':temp=num.top()/temp;num.pop();break;
                default: break;
            }
        oper.pop();
        }
        return temp;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值