您的位置:首页 > 其它

Basic Caculator

2015-07-21 21:37 246 查看
Basic caculator

这题有几种思路,都不是很简单,这就是为啥计算机喜欢用波兰和你波兰,因为求值非常简单,已经体现了运算符优先级了。

1. 运算符优先级表,非常麻烦,需要n*n的表格

2. 用火车调度场算法将中缀边后缀,dijstra发明的,算法细节多,不容易写对

3. 下面的算法,前提是只有+-()

class Solution {
public:
    int calculate(string s) {
        stack<int> st;
        int num=0, result=0, sign=1;
        for(auto e: s){
            if(isdigit(e)){
                num=num*10+e-'0';
            }else if(e=='+'){
                result+=num*sign;
                num=0;
                sign=1;
            }else if(e=='-'){
                result+=num*sign;
                num=0;
                sign=-1;
            }else if(e=='('){
                st.push(result);
                st.push(sign);
                num=0;
                sign=1;//non-negative
                result=0;
            }else if(e==')'){
                result+=num*sign;
                num=0;
                sign=1;
                result*=st.top();st.pop();
                result+=st.top();st.pop();
            }
        }
        if(num) result+=num*sign;
        return result;
    }
};


这里面其实是添加了符号进去来求值,因此相对比较简单
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: