• leetcode_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.

    Credits:
    Special thanks to @ts for adding this problem and creating all test cases.

    代码:

    class Solution {
    public:
        int calculate(string s) {
        stack<int> st;
        int result = 0;
        int i = 0;
        while(i<s.size())
        {
             int sum = 0;
             if(i<s.size()&&s.at(i)>='0'&&s.at(i)<='9')
             {
                 while(i<s.size()&&s.at(i)>='0'&&s.at(i)<='9')
                 {
                   sum = sum * 10 + s.at(i)-'0';
                   i++;  
                 }
                 st.push(sum);
             }
             else if(i<s.size()&&s.at(i)=='+')
             {
                    st.push((int)s.at(i));  
                    i++;
             }
             else if(i<s.size()&&s.at(i)=='-')
             {
                    st.push((int)s.at(i));
                    i++;
    
             }
             else if(i<s.size()&&s.at(i)=='*')
             {
                      int a = st.top();
                      st.pop();
                      int sum1 = 0;
                      i++;
                      while(s.at(i)==' ')
                      {
                                       i++;
                      }
                      if(i<s.size()&&s.at(i)>='0'&&s.at(i)<='9')
                      {
                          while(i<s.size()&&s.at(i)>='0'&&s.at(i)<='9')
                          {
                             sum1 = sum1 * 10 + s.at(i)-'0';
                             i++;          
                          }
                          a*=sum1;
                          st.push(a);  
                      }
             }
             else if(i<s.size()&&s.at(i)=='/')
             { 
                 
                      int a = st.top();
                      st.pop();
                      int sum1 = 0;
                      i++;
                      while(s.at(i)==' ')
                      {
                          i++;
                      }
                      while(i<s.size()&&s.at(i)>='0'&&s.at(i)<='9')
                      {
                          sum1 = sum1 * 10 + s.at(i)-'0';
                          i++;
                      }
                      a = (int)(a/sum1);
                      st.push(a);
             }
             else 
             {
                      i++;
             }
        }
        stack<int> st1;
        while(!st.empty())
        {
            st1.push(st.top());
            st.pop();              
        }
        while(!st1.empty())
        {
               int a = st1.top();
               st1.pop();
               if(st1.empty())
               return a;
               else
               {
                   if((char)(st1.top())=='+')
                   {
                      st1.pop();
                      int temp = st1.top()+a;
                      st1.pop();
                      st1.push(temp);
                   }
                   else if((char)(st1.top())=='-')
                   {
                      st1.pop();
                      int temp = a-st1.top();
                      st1.pop();
                      st1.push(temp);
                   }
               }
        }
        return st1.top();
        }
    };

    方法比较繁琐。。。就这样了。

  • 相关阅读:
    MapInfo 文件解析
    XML 序列化与反序列化
    GPS定位RTK解决方案
    JS遍历OCX方法
    Oracle 11g的日志路径
    临时表空间
    Oracle Stream 同步数据
    通过merge语句完成表数据同步
    处理机调度
    特征选取方法PCA与LDA
  • 原文地址:https://www.cnblogs.com/sunp823/p/5601419.html
Copyright © 2020-2023  润新知