【道德经·第二十三章】从事于道者同于道;德者同于德;失者同于失。同于道者,道亦乐得之;同于德者,德亦乐得之;同于失者,失亦乐得之。
基本计算器
题目描述
请写一个整数计算器,支持加减乘三种运算和括号。数据范围:0≤∣s∣≤100,保证计算结果始终在整型范围内。要求:空间复杂度: O(n),时间复杂度 O(n)。
示例1
示例2
1 2
   | 输入:"(2*(3-4))*5" 返回值:-10
   | 
 
示例3
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
   | int solve(string s) {          int n = s.size();     stack<int> stk;     char sign = '+';     int num = 0;     int ans = 0;          for(int i = 0; i < n; i++) {         char c = s[i];                  if(c == ' ') continue;                  if(c>='0' && c<='9') num = num*10 + (c-'0');                  if(c == '(') {             int j = i+1;             int cnt = 1;             while(cnt > 0) {                 if(s[j] == '(') cnt++;                 if(s[j] == ')') cnt--;                 j++;             }                          num = solve(s.substr(i+1, j-i-1));             i = j-1;         }                   if(i==n-1 || c=='+' || c=='-' || c=='*' || c=='/') {             switch(sign) {                 case '+': stk.push( num); break;                 case '-': stk.push(-num); break;                 case '*': stk.top()*=num; break;                 case '/': stk.top()/=num; break;             }                          sign = c;             num = 0;         }              }          while(!stk.empty()) {         ans += stk.top();         stk.pop();     }          return ans;      }
  | 
 
位我上者,灿烂星空;道德律令,在我心中。