Basic Caculator
2015-07-21 21:37
246 查看
Basic caculator
这题有几种思路,都不是很简单,这就是为啥计算机喜欢用波兰和你波兰,因为求值非常简单,已经体现了运算符优先级了。
1. 运算符优先级表,非常麻烦,需要n*n的表格
2. 用火车调度场算法将中缀边后缀,dijstra发明的,算法细节多,不容易写对
3. 下面的算法,前提是只有+-()
这里面其实是添加了符号进去来求值,因此相对比较简单
这题有几种思路,都不是很简单,这就是为啥计算机喜欢用波兰和你波兰,因为求值非常简单,已经体现了运算符优先级了。
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; } };
这里面其实是添加了符号进去来求值,因此相对比较简单
相关文章推荐
- Sizeof与Strlen的区别与联系(转)
- Linux 多核下绑定硬件中断到不同 CPU(IRQ Affinity) 转
- .Net GC的工作机制 垃圾回收机制的工作原理
- 求一棵无根树的不同子树个数
- vim删除命令
- 7.21日志
- 顺序表3中删除元素的方式(你造吗)
- 两篇文章帮你入门Django(下)
- 快速排序
- Control.Invoke和Control.BeginInvoke细述
- android实现 服务器功能
- 工具系列——npm对的包管理
- 【面试题之概率部分】蓄水池抽样
- HDU 1251 统计难题-字典树
- Hive常见内置函数及其使用
- Visual Studio 2015 中文企业版及专业版 正式版下载地址 激活秘钥 正版key
- 理解OAuth 2.0 -摘自网络
- Ubuntu 10.10安装VIM
- 大数据运营-服务型企业架构新思维
- 欢迎使用CSDN-markdown编辑器