面试题 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;
}
};