zoukankan      html  css  js  c++  java
  • Basic Calculator II

    Implement a basic calculator to evaluate a simple expression string.

    The expression string contains only non-negative integers, +-*/ operators and empty spaces . The integer division should truncate toward zero.

    You may assume that the given expression is always valid.

    Some examples:

    "3+2*2" = 7
    " 3/2 " = 1
    " 3+5 / 2 " = 5
    

    Note: Do not use the eval built-in library function.

     1 class Solution {
     2 public:
     3     int calculate(string s) {
     4         stack<int> num;
     5         stack<char> symbol;
     6         symbol.push('+');
     7         int n;
     8         n=s.length();
     9         int right;
    10         if(n<1) return -1;
    11         int i;
    12         for(i=0;i<n;)
    13         {
    14             if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')
    15             {
    16                 symbol.push(s[i]);
    17                 i++;
    18             }
    19             else if(s[i]==' ')
    20                     i++;
    21                  else
    22                  {
    23                      int right=0;
    24                      while(i<n&&s[i]>='0'&&s[i]<='9')
    25                      {
    26                          right=right*10+(s[i]-'0');
    27                          i++;
    28                      }
    29                      if((!symbol.empty())&&(symbol.top()=='*'||symbol.top()=='/'))
    30                      {
    31                          right=cal_helper(num.top(),right,symbol.top());
    32                          num.pop();
    33                          symbol.pop();
    34                      }
    35                      num.push(right);
    36                  }
    37         }
    38         int res=0;
    39         char sym;
    40         int left;
    41         while(!symbol.empty())
    42         {
    43             left=num.top();
    44             sym=symbol.top();
    45             if(sym=='-')
    46               left=-left;
    47             num.pop();
    48             symbol.pop();
    49             res+=left;
    50         }
    51         return res;
    52     }
    53 private:
    54     int cal_helper(int left, int right, char s)
    55     {
    56         
    57         switch(s)
    58         {
    59         case '*':return left*right;
    60         case '/':return left/right;
    61         default:return 0;
    62         }
    63         
    64     }
    65 };
  • 相关阅读:
    单例和工厂设计模式
    EFCore中如何移除主外键关系
    使用.Net Core实现FNV分布式hash一致性算法
    我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
    FNV哈希算法
    AspNetCore中基于Session的身份验证
    详解Microsoft.AspNetCore.CookiePolicy
    理解cookies
    详解Asp.Net Core中的Cookies
    5. 安装Dashboard UI、heapster
  • 原文地址:https://www.cnblogs.com/zl1991/p/4670121.html
Copyright © 2011-2022 走看看