题解 | #表达式求值#

表达式求值

https://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int getPriority(char op) {
    if (op == '+' || op == '-') return 1;
    if (op == '*' || op == '/') return 2;
    if (op == '(') return 0;
    return 0;
}

int calculate(int a, int b, char op) {
    switch (op) {
        case '+': return a + b;
        case '-': return a - b;
        case '*': return a * b;
        case '/': return a / b;
        default: return 0;
    }
}

int solve(char* s) {
    int len = strlen(s);
    int values[len];
    int valIndex = 0;

    char operators[len];
    int opIndex = -1;

    for (int i = 0; i < len; i++) {
        if (s[i] >= '0' && s[i] <= '9') {
            int val = 0;
            while (i < len && s[i] >= '0' && s[i] <= '9') {
                val = val * 10 + (s[i] - '0');
                i++;
            }
            i--;

            values[valIndex++] = val;
        } else if (s[i] == '(') {
            operators[++opIndex] = s[i];
        } else if (s[i] == ')') {
            while (opIndex >= 0 && operators[opIndex] != '(') {
                int b = values[--valIndex];
                int a = values[--valIndex];
                values[valIndex++] = calculate(a, b, operators[opIndex--]);
            }
            opIndex--; // 弹出 '('
        } else if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') {
            while (opIndex >= 0 && getPriority(operators[opIndex]) >= getPriority(s[i])) {
                int b = values[--valIndex];
                int a = values[--valIndex];
                values[valIndex++] = calculate(a, b, operators[opIndex--]);
            }
            operators[++opIndex] = s[i];
        }
    }

    while (opIndex >= 0) {
        int b = values[--valIndex];
        int a = values[--valIndex];
        values[valIndex++] = calculate(a, b, operators[opIndex--]);
    }

    return values[0];
}

全部评论

相关推荐

就只能3个月,但是要求长期全职实习
Swaying:你确实是能长期实习啊,但是你那时候有事也没啥办法嘛
点赞 评论 收藏
分享
炫哥_:哥们项目描述里面vector和mysql之类的都要写吗,直接开头技术栈巴拉巴拉就行了,完全不是技术点啊
点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
点赞 评论 收藏
分享
如题,他是要劝退我了吗
椛鸣:根据你的时间 来给你安排任务 如果你时间长 可能会参与到一些长期的项目 时间短 那就只能做点零工
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务