题解 | #简单计算器#

简单计算器

https://www.nowcoder.com/practice/5759c29a28cb4361bc3605979d5a6130

#include <iostream>
#include <stack>

using namespace std;

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

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

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 main() {

    string str;
    while (getline(cin, str)){
        if (str == "0") break;
        str.push_back('#');
        stack<double> num;
        stack<char> op;
        string number;

        for (int i = 0; i < str.size(); ++i) {
            if ('0'<=str[i] && str[i]<='9'){
                number.push_back(str[i]);
            } else if (str[i]==' ' && !number.empty()){
                num.push(stod(number));
                number = "";
            } else if (isOp(str[i])){
                if (str[i]=='#'){
                    num.push(stod(number));
                }

                while (!op.empty() && priority(op.top()) >= priority(str[i])){
                    double y = num.top();
                    num.pop();
                    double x = num.top();
                    num.pop();
                    char oper = op.top();
                    op.pop();
                    double result = yunsuan(x, y, oper);
                    num.push(result);
                }
                op.push(str[i]);
            }
        }

        printf("%.2lf\n", num.top());

    }

    return 0;
}

全部评论

相关推荐

头像
11-27 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗?&nbsp;刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务