online_judge_1101
2015-12-16 21:09
381 查看
#include <iostream> #include <string> #include <stack> using namespace std; bool pri(char a, char b) { if((a=='*' || a=='/')&&(b=='+' || b=='-')) return true; return false; } int cal(double a, double b, char c) { double d; switch(c) { case '+': d = a + b; break; case '-': d = a - b; break; case '*': d = a * b; break; case '/': d = a / b; break; } return d; } int main() { string str; double data[102]; char c[102],ch,cc; stack<double> da; stack<char> op; int i,len; double x,y; double result; int cnt; while(cin>>str) { while(!da.empty()) da.pop(); while(!op.empty()) op.pop(); len = str.size(); cnt = 0; for(i=0; i<102; ++i) data[i] = 0; for(i=0; i<len; ++i) { if(str[i]>='0' && str[i]<='9') { data[cnt] = data[cnt]*10 + str[i] - '0'; } else { c[cnt] = str[i]; cnt ++; } } if(cnt == 0) { cout<<str<<endl; continue; } c[cnt] = 0; da.push(data[0]); op.push(c[0]); da.push(data[1]); for(i=1; i<cnt; ++i) { if(!op.empty()) { ch = op.top(); if(pri(c[i], ch)) { da.push(data[i+1]); op.push(c[i]); } else { x = da.top(); da.pop(); y = da.top(); da.pop(); cc = op.top(); op.pop(); x = cal(y, x, cc); da.push(x); i--; } } else { op.push(c[i]); da.push(data[i+1]); } } while(!op.empty()) { x = da.top(); da.pop(); y = da.top(); da.pop(); cc = op.top(); op.pop(); result = cal(y, x, cc); da.push(result); } cout<<result<<endl; } return 0; }
这是个大水题,跟浙大1019比差远了。。。题目给的测试数据太少了。。有时候一点小小的错误会导致很惨的结果……
相关文章推荐
- c或c++中int转float中在printf中的问题
- UIButton上图片和文字的位置调整
- 部署和调优 1.5 vsftp部署和优化-1
- android studio 中去除应用标题栏
- C#方法的练习
- 右侧跟踪导航
- IOS多媒体
- Linux 下curl模拟Http 的get or post请求
- jsp环境搭建
- UIButton常用技巧
- Android下手动挂载分区
- 弗洛伊德算法介绍
- 集成支付宝钱包支付iOS SDK的方法与经验
- UML行为图
- iOS UISegmentedControl分段按钮
- x86-64栈帧布局分布
- shuoj-Josephus问题-dp数学
- linux c 生产者与消费者问题 信号量(sem_t)
- linux内核的三种调度方法
- React-非dom属性-key