NYOJ - 35 表达式求值 分类: NYOJ 2015-03-18 10:33 31人阅读 评论(0) 收藏
2015-03-18 10:33
477 查看
#include<iostream> #include<string> #include<stack> #include<cstdio> using namespace std; stack<double>sn; stack<char>sc; double num, des, dou; bool prt, flag; int t, len; string str; bool isNum(char c) { if(c >= '0' && c <= '9') return true; if(c== '.') { flag = true; return true; } return false; } bool isOp(char c) { if(c == '+' || c == '-' || c == '*' || c == '/') return true; return false; } void init() { while(sn.size()) sn.pop(); while(sc.size()) sc.pop(); str.clear(); len = num = des = 0; dou = 1; prt = false; flag = false; } void calm() { if(sc.size() && isOp(sc.top())) { double ans; double y = sn.top(); sn.pop(); double x = sn.top(); sn.pop(); char op = sc.top(); sc.pop(); switch(op) { case '+': ans = x + y; break; case '-': ans = x - y; break; case '*': ans = x * y; break; case '/': ans = x / y; break; } // cout<<op<<" "<<ans<<endl; sn.push(ans); } } int main() { // freopen("in.in","r",stdin); cin>>t; while(t--) { init(); cin>>str; int len = str.length(); for(int i = 0; i < len; i++) { if(isNum(str[i])) { if(str[i] == '.') continue; if(!flag) num = num*10 + str[i] - '0'; else{ des = des*10 + str[i] - '0'; dou *= 10; } } else { num = num + des/dou; if(str[i] == '+' || str[i] == '-') { if(!prt) sn.push(num); while(sc.size() && sc.top() != '(')calm(); sc.push(str[i]); prt = false; } else if(str[i] == '*' || str[i] == '/') { if(!prt) sn.push(num); if(sc.size()) if(sc.top()=='*' || sc.top()=='/') calm(); sc.push(str[i]); prt = false; } else if(str[i] == '(') { sc.push(str[i]); } else if(str[i] == ')') { if(!prt) sn.push(num); while(sc.top() != '(') calm(); sc.pop(); prt = true; } else { if(!prt) sn.push(num); while(sn.size() > 1) calm(); printf("%0.2lf\n",sn.top()); sn.pop(); break; } num = 0; flag = false; dou = 1; des = 0; } } } return 0; }
相关文章推荐
- java用正则表达式判断字符串中是否仅包含英文字母、数字和汉字 分类: Android JAVA 2015-06-07 21:08 31人阅读 评论(0) 收藏
- iOS正则表达式 分类: ios技术 2015-07-14 14:00 35人阅读 评论(0) 收藏
- 第三章 运算符、表达式与语句 分类: java 2009-12-29 16:46 304人阅读 评论(0) 收藏
- sgu 172 分类: sgu 2015-03-08 17:34 35人阅读 评论(0) 收藏
- 基于命令行编译打包phonegap for android应用 分类: Android Phonegap 2015-05-10 10:33 73人阅读 评论(0) 收藏
- [正则表达式]非常经典的正则表达式 分类: 正则表达式 2009-11-06 03:18 393人阅读 评论(0) 收藏
- IBM Rational AppScan 无法记录登录序列 分类: 数据安全 2015-03-18 16:46 157人阅读 评论(0) 收藏
- HDU2680 Choose the best route 最短路 分类: ACM 2015-03-18 23:30 37人阅读 评论(0) 收藏
- NYOJ-975 关于521 AC 分类: NYOJ 2014-02-25 22:14 349人阅读 评论(0) 收藏
- biu 分类: poi 2015-04-16 10:03 31人阅读 评论(0) 收藏
- 基于MATLAB的滤波算法 分类: 编程学习 2014-11-25 23:16 35人阅读 评论(0) 收藏
- 基于命令行编译打包phonegap for android应用 分类: Android Phonegap 2015-05-10 10:33 72人阅读 评论(0) 收藏
- shell入门之变量测试 分类: 学习笔记 linux ubuntu 2015-07-10 15:49 31人阅读 评论(0) 收藏
- 用secureCRT ssh登陆不显示用户名和路径解决方案 分类: 软件工具学习 2015-03-18 16:52 36人阅读 评论(0) 收藏
- NYOJ-289 苹果 TLE 分类: NYOJ 2013-12-29 17:52 282人阅读 评论(0) 收藏
- NYOJ-456 邮票分你一半 AC 分类: NYOJ 2014-01-02 14:33 152人阅读 评论(0) 收藏
- Activity与Fragment数据传递之Fragment之间获取数据 分类: Android 2015-07-02 10:33 11人阅读 评论(0) 收藏
- Error: No suitable device found: no device found for connection 'System eth0' 分类: Linux 2015-03-18 21:24 64人阅读 评论(0) 收藏
- 【原创】TCP Socket 简单练习 --- select同时监测多个描述符 分类: Linux --- 应用程序设计 2014-12-23 10:33 75人阅读 评论(0) 收藏
- ARM硬件平台上基于UCOS移植Lwip网络协议栈 分类: 嵌入式开发学习 2015-06-14 10:33 55人阅读 评论(1) 收藏