题解 | #计算表达式#

计算表达式

https://www.nowcoder.com/practice/7b18aa6b7cc14f8eaae6b8acdebf890b

#include <iostream>
#include <stack>

using namespace std;

bool isOp(char op){
    if (op=='+' || op=='-' || op=='*' || op=='/' || op=='#'){
        return true;
    }
    return false;
}

double yunsuan(double x, double y, char op){
    switch (op) {
        case '+': return x+y;
        case '-': return x-y;
        case '*': return x*y;
        case '/': return x/y;
        default: return 0;
    }
}

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

int main() {

    string str;
    while (getline(cin,str)){
        if (str=="0") break;
        str.push_back('#');

        stack<double> numStack;
        stack<char> opStack;
        string num;
        for (int i = 0; i < str.size(); ++i) {
            if (str[i]>='0' && str[i]<='9'){
                num.push_back(str[i]);
            } else{
                numStack.push(stod(num));
                num = "";
                while (!opStack.empty() && priority(opStack.top())>= priority(str[i])){
                    char oper = opStack.top();
                    opStack.pop();
                    double y = numStack.top();
                    numStack.pop();
                    double x = numStack.top();
                    numStack.pop();
                    double result = yunsuan(x,y,oper);
                    numStack.push(result);
                }
                opStack.push(str[i]);
            }
        }

        // printf("%.2lf\n",numStack.top());
        printf("%.0lf\n",numStack.top());
    }

    return 0;
}

全部评论

相关推荐

是每个人事都这样与找工作的人这样沟通吗?正常询问不可以吗
超时空记忆丶:这种人适合跟我聊 我能骂得她心里难受一天,这种byd一看就是欠骂,这么好的机会楼主别错过。
点赞 评论 收藏
分享
白火同学:能。我当初应届沟通了1200,收简历50,面试10左右吧,加油投吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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