题解 | 简单计算器

简单计算器

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

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

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

int getOrder(char str){
    if(str == '#'){
        return 1;
    }else if(str == '$'){
        return 2;
    }else if(str == '+' || str == '-'){
        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)){
        if(str == "0"){
            break;
        }

        stack<double> number;
        stack<char> operate;
        str += "$";
        operate.push('#');

        int i=0;
        while(i<str.size()){
            // 跳过空格
            if(str[i] == ' '){
                i++;
            }else if(str[i] >='0' && str[i]<='9'){
                number.push(getNumber(i, str));
            }else{
                // 操作符处理
                if(getOrder(str[i]) > getOrder(operate.top())){
                    operate.push(str[i++]);
                }else{
                    double y = number.top();
                    number.pop();
                    double x = number.top();
                    number.pop();
                    double temp = caculate(x,y,operate.top());
                    number.push(temp);
                    operate.pop();
                }
            }
        }
        printf("%.2lf\n", number.top());
    }
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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