online_judge_1101
来源:互联网 发布:数据分析技术 编辑:程序博客网 时间:2024/05/24 08:33
#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比差远了。。。题目给的测试数据太少了。。有时候一点小小的错误会导致很惨的结果……
0 0