HDU
来源:互联网 发布:莫知的意思是什么 编辑:程序博客网 时间:2024/06/12 00:11
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
1 + 24 + 2 * 5 - 7 / 110
3.0013.36
#include <cstdio>#include <iostream>#include <string>#include <sstream>#include <cstring>#include <stack>#include <queue>#include <algorithm>#include <cmath>#include <map>using namespace std;int main(){ string s; int flag; while(getline(cin,s)) { if(s.size()==1)break; flag = 1; stringstream stream(s); double num; char op = ' '; stack<char> sop; stack<double> snum; while(1) { if(flag) { stream >> num; if(op =='*'||op == '/') { double num1 = snum.top(); snum.pop(); if(op=='*')num1 = num * num1; elsenum1 = num1 / num; snum.push(num1); } else snum.push(num); flag=0; } else { if(stream>>op); else break; if(op=='+'||op=='-') { double num1,num2; char c; if(!sop.empty()) { c=sop.top(),sop.pop(); num2=snum.top(),snum.pop(); num1=snum.top(),snum.pop(); if(c=='+')num1+=num2; else num1-=num2; snum.push(num1); } sop.push(op); } flag=1; } } while(!sop.empty()) { op=sop.top(),sop.pop(); double num1,num2; num2=snum.top(),snum.pop(); num1=snum.top(),snum.pop(); if(op=='+')num1+=num2; else num1-=num2; snum.push(num1); } printf("%.2lf\n",snum.top()); } return 0;}
#include<iostream>#include<stack>#include<cstring>#include<cstdio>#include<sstream>#include<iomanip>#include<string>using namespace std;int main() {char op;double num,temp;while(scanf("%lf",&num)){stack<double> sum;op = getchar();if(num == 0 && op == '\n')break;sum.push(num);while(1){scanf("%c %lf", &op, &num);switch (op){case '+':sum.push(num);break;case '-':sum.push(-num);break;case '*':temp = sum.top();sum.pop();sum.push(temp*num);break;case '/':temp = sum.top();sum.pop();sum.push(temp/num);break;}if(getchar() == '\n')break;}double ans = 0;while(!sum.empty()){ans += sum.top();sum.pop();}printf("%.2lf\n",ans);}}