【C语言刷LeetCode】227. 基本计算器 II(M)

实现一个基本的计算器来计算一个简单的字符串表达式的值。

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

示例 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;
}
发布了140 篇原创文章 · 获赞 17 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/jin615567975/article/details/104387420