题解 | 计算表达式

计算表达式

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

#include <iostream>
#include <stack>
#include <cstdio>
#include <string>
using namespace std;

double getNumber(int &i, string str){
    double number=0;
    while(str[i]>='0' && str[i]<='9'){
        number = number*10 - '0' + str[i++];
    }
    return number;
}

int getOrder(char x){
    if(x=='#'){
        return 1;
    }else if(x=='$'){
        return 2;
    }else if(x=='+' || x=='-'){
        return 3;
    }else{
        return 4;
    }
}

double caculate(double x, double y, char op){
    if(op=='+'){
        return x+y;
    }else if(op=='-'){
        return x-y;
    }else if(op=='*'){
        return x*y;
    }else{
        return x/y;
    }
}

int main() {
    string str;
    while(getline(cin, str)){
        int i=0;
        stack<double> numbers;
        stack<char> operates;
        str += "$";
        operates.push('#');
        while(i<str.size()){
            if(str[i]>='0' && str[i]<='9'){
                numbers.push(getNumber(i, str));
            }else{
                if(getOrder(str[i]) > getOrder(operates.top())){
                    operates.push(str[i++]);
                }else{
                    double y = numbers.top();
                    numbers.pop();
                    double x = numbers.top();
                    numbers.pop();
                    double temp = caculate(x, y, operates.top());
                    operates.pop();
                    numbers.push(temp);
                }
            }
        }
        cout << numbers.top() << endl;
    }
}




全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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