zoukankan      html  css  js  c++  java
  • 227. 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> stack;
     5         int res = 0;
     6         int len = s.length();
     7         for (int i = 0; i < len; i++) {
     8             char c = s[i];
     9             if (isdigit(c)) {
    10                 int cur = c - '0';
    11                 while (i + 1 < len && isdigit(s[i + 1])) {
    12                     cur = cur * 10 + s[i + 1] - '0';
    13                     i++;
    14                 }
    15                 stack.push(cur);
    16             } else if (c == '+') {
    17                 if (stack.size() == 1)
    18                     stack.push(1);
    19                 else {
    20                     res = stack.top();
    21                     stack.pop();
    22                     res = res * stack.top();
    23                     stack.pop();
    24                     res = res + stack.top();
    25                     stack.pop();
    26                     stack.push(res);
    27                     stack.push(1);
    28                 }
    29             } else if (c == '-') {
    30                 if (stack.size() == 1)
    31                     stack.push(-1);
    32                 else {
    33                     res = stack.top();
    34                     stack.pop();
    35                     res = res * stack.top();
    36                     stack.pop();
    37                     res = res + stack.top();
    38                     stack.pop();
    39                     stack.push(res);
    40                     stack.push(-1);
    41                 }
    42             } else if (c == '*') {
    43                 //avoid space
    44                 while (i + 1 < len && !isdigit(s[i + 1])) {
    45                     i++;
    46                 }
    47                 int cur = s[++i] - '0';
    48                 while (i + 1 < len && isdigit(s[i + 1])) {
    49                     cur = cur * 10 + s[i + 1] - '0';
    50                     i++;
    51                 }
    52                 res = stack.top() * cur;
    53                 stack.pop();
    54                 stack.push(res);
    55             } else if (c == '/') {
    56                 while (i + 1 < len && s[i + 1] == ' ') {
    57                     i++;
    58                 }
    59                 int cur = s[++i] - '0';
    60                 while (i + 1 < len && isdigit(s[i + 1])) {
    61                     cur = cur * 10 + s[i + 1] - '0';
    62                     i++;
    63                 }
    64                 res = stack.top() / cur;
    65                 stack.pop();
    66                 stack.push(res);
    67             }
    68         }
    69         if (stack.size() == 1)
    70             return stack.top();
    71         else {
    72             res = stack.top();
    73             stack.pop();
    74             res = res * stack.top();
    75             stack.pop();
    76             res = res + stack.top();
    77             return res;
    78         }
    79     }
    80 };
  • 相关阅读:
    Java 实现 Word 文档分栏效果
    Java 在PPT中添加SmartArt图形
    Java 创建 Excel 数据透视表
    Java分布式架构下如何实现分布式锁
    为什么选择学习Java语言的人越来越多?
    浅析JAVA中VO、DTO、DO、PO的了解
    Java基础之何为动态代理?
    Java三大框架是什么?
    android 系统裁剪 ​
    java怎么就能跨平台了呢
  • 原文地址:https://www.cnblogs.com/wxquare/p/5064966.html
Copyright © 2011-2022 走看看