面试题 16.26. 计算器

面试题 16.26. 计算器
给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。

表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。

示例 1:

输入: "3+2*2"
输出: 7

示例 2:

输入: " 3/2 "
输出: 1

示例 3:

输入: " 3+5 / 2 "
输出: 5
class Solution {
public:
    int calculate(string s) {
       int i = 0;
       return help(s, i);    
   }

   int help(string &s, int &i){
       int left = 0, right = 0;
       char op = '+';
       while(i < s.size()){
           if(s[i] != ' '){
               long n = parse_num(s, i);
               switch(op){
                   case '+' : 
                       left += right;
                       right = n;
                       break;
                   case '-' :
                       left += right;
                       right = -n;
                       break;
                   case '*' :
                       right *= n;
                       break;
                   case '/' :
                       right /= n;
                       break;
               }
               if(i < s.size()){
                   op = s[i];
               }
           }
           ++i;
       }
       return left + right;
   }

   long parse_num(string &s, int &i){
       long n = 0;
       while(i < s.size() && isdigit(s[i])){
           n = n * 10 + (s[i++] - '0');
       }
       return n;
   }
};


猜你喜欢

转载自blog.csdn.net/weixin_43599304/article/details/121389161