LeetCode c++基本計算機II

1354 ワード

単純な文字列式の値を計算するために、基本的な計算機を実装します.
文字列式には、非負の整数、+、-、*、/の4つの演算子とスペースのみが含まれます.整数除算では、整数部分のみが保持されます.
例1:
入力:「3+2*2」出力:7例2:
入力:「3/2」出力:1例3:
入力:3+5/2出力:5説明:
与えられた式が有効だと仮定することができます.内蔵のライブラリ関数evalは使用しないでください.注意:ここにはいくつかの小さな問題があります.op='+'を初期化します.2.数値範囲は非負の整数であるため、s[i]>='0';3.非数字を判断する場合、条件は最後の数字の処理、すなわち||i==n-1を含むべきである.オペレータ操作がスタックを終了した後、オペレータを再取得しnum=0を初期化する必要がある.
class Solution {
public:
    int calculate(string s) {
        long res = 0, num = 0, n = s.size();
        char op = '+';
        stack st;
        for (int i = 0; i < n; ++i) {
            if (s[i] >= '0') {
                num = num * 10 + s[i] - '0';
            }
            if ((s[i] < '0' && s[i] != ' ') || i == n - 1) {
                if (op == '+') st.push(num);
                if (op == '-') st.push(-num);
                if (op == '*' || op == '/') {
                    int tmp = (op == '*') ? st.top() * num : st.top() / num;
                    st.pop();
                    st.push(tmp);
                }
                op = s[i];
                num = 0;
            } 
        }
        while (!st.empty()) {
            res += st.top();
            st.pop();
        }
        return res;
    }
};