Leetcode Basic Calculator II

来源:互联网 发布:舆情监测软件价格 编辑:程序博客网 时间:2024/05/12 01:31

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

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

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;    }    };


0 0
原创粉丝点击