【
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: "3+2*2"
输出: 7
示例 2:
输入: " 3/2 "
输出: 1
示例 3:
输入: " 3+5 / 2 "
输出: 5
说明:
你可以假设所给定的表达式都是有效的。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/basic-calculator-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
】
表达式的计算,一般都考虑栈,此题便是。
加减其实是一类操作,减一个数便是加上一个数的负数。乘除优先级高,可以立即操作。
最后把所有栈里面数相加便是表达式结果了。
int calculate(char * s){
int i;
long long num = 0;
int len = strlen(s);
long long stack[809600] = {0};
int index = 0;
int tmp;
char sign = '+';
int sum = 0;
for (i = 0; i < len; i++) {
if (s[i] >= '0') {
num = num * 10 + s[i] - '0';
}
if((s[i] == '+') || (s[i] == '-') || (s[i] == '*') || (s[i] == '/') || (i == len-1)) {
switch(sign) {
case '+' :
stack[index] = num;
index++;
break;
case '-' :
stack[index] = -num;
index++;
break;
case '*' :
tmp = stack[index-1] * num;
stack[index-1] = tmp;
break;
case '/' :
tmp = stack[index-1] / num;
stack[index-1] = tmp;;
break;
}
sign = s[i];
num = 0;
}
}
for (i = 0; i < index; i++) {
sum += stack[i];
}
return sum;
}