Basic Caculator

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

这里面其实是添加了符号进去来求值,因此相对比较简单
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值