Leetcode Basic Calculator II

题意:设计一个计算器,实现四则运算。

思路:顺序处理,先处理乘除运算,再处理加减运算。注意最后一个数字及运算的处理。

class Solution {
public:
    int calculate(string s) {
        stack<int> addnumber;
        stack<char> addop;
        string tempnum = "";
        char preop = '+';
        for(int i = 0; i < s.length(); ++ i) {
            if(s[i] == ' ') continue;
            if(s[i] >= '0' && s[i] <= '9') {
                tempnum += s[i];
            }
            else {
                int num = std::stoi(tempnum);
                tempnum = "";
                if(preop == '*' || preop == '/') {
                    int tempnum = addnumber.top();
                    addnumber.pop();
                    if(preop == '*') addnumber.push(tempnum * num);
                    if(preop == '/') addnumber.push(tempnum / num);
                    preop = s[i];
                    if(s[i] == '-' || s[i] == '+') addop.push(s[i]);
                    continue;
                }
                preop = s[i];
                
                if(s[i] == '-' || s[i] == '+') addop.push(s[i]);
                addnumber.push(num);
            }
        }
        if(preop == '*') {
            int num1 = addnumber.top(); addnumber.pop();
            int num2 = std::stoi(tempnum);
            addnumber.push(num1 * num2);
        }
        else if(preop == '/') {
            int num1 = addnumber.top(); addnumber.pop();
            int num2 = std::stoi(tempnum);
            addnumber.push(num1 / num2);
        }
        else addnumber.push(std::stoi(tempnum));
        
        
        // add
        stack<int> readdnumber;
        while(!addnumber.empty()) {
            readdnumber.push(addnumber.top());
            addnumber.pop();
        }
        stack<char> readdop;
        while(!addop.empty()) {
            readdop.push(addop.top());
            addop.pop();
        }
        
        int re = readdnumber.top();
        readdnumber.pop();
        while(!readdnumber.empty()) {
            int num = readdnumber.top();
            readdnumber.pop();
            char op = readdop.top();
            readdop.pop();
            if(op == '-') re = re - num;
            if(op == '+') re = re + num;
        }
        
        return re;
    }
    
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值