HDU1237

 1 /**************************************************************
 2   作者:陈新
 3   邮箱:cx2pirate@gmail.com
 4   用途:hdu1237
 5   时间:2014.3.4 23:17
 6   编译环境 : g++
 7   数据:10308543    2014-03-15 20:45:36    Accepted    1237    140MS    424K    1948 B    G++    超级旅行者
 8  *************************************************************/
 9 
10 #include <iostream>
11 #include <stack>
12 #include <iomanip>
13 
14 using namespace std;
15 
16 typedef struct{
17     stack<double> nums;
18     char op;
19 }EXPRESSION;
20 
21 bool endingCheck();
22 double caculate(double firstNum,double secondNum,char op);
23 void caculateExpression(EXPRESSION * pExpr);
24 
25 int main(){
26     EXPRESSION expr;
27     double firstNum = 0;
28     while(cin >> firstNum){
29         if(endingCheck())
30         {
31             if(firstNum != 0){
32                 cout << fixed << setprecision(2) << firstNum << endl;
33                 continue;
34             }
35             else{
36                 break;
37             }
38         }
39         else{
40             expr.nums.push(firstNum);
41         }
42 
43         char op;
44         while(op = cin.get()){
45             double thirdNum;
46             cin >>  thirdNum;
47             if(op == '+' || op == '-'){
48                 caculateExpression(&expr);
49                 expr.nums.push(thirdNum);
50                 expr.op = op;
51             }
52             else{
53                 double secondNum = expr.nums.top();
54                 expr.nums.pop();
55                 expr.nums.push(caculate(secondNum,thirdNum,op));
56             }
57             if(endingCheck()){
58                 caculateExpression(&expr);
59                 break;
60             }
61         }
62 
63         cout << fixed << setprecision(2) << expr.nums.top() << endl;
64         expr.nums.pop();
65     }
66     return 1;
67 }
68 
69 bool endingCheck(){
70     return cin.get() == '\n';
71 }
72 
73 double caculate(double firstNum,double secondNum,char op){
74     if(op == '+'){
75         return firstNum + secondNum;
76     }
77     else if(op == '-'){
78         return firstNum - secondNum;
79     }
80     else if(op == '*'){
81         return firstNum * secondNum;
82     }
83     else if(op == '/'){
84         return firstNum / secondNum;
85     }
86 }
87 
88 void caculateExpression(EXPRESSION * pExpr){
89     if(pExpr ->nums.size() == 1){
90         return;
91     }
92     else{
93         double secondNum = pExpr ->nums.top();
94         pExpr ->nums.pop();
95         double firstNum = pExpr ->nums.top();
96         pExpr ->nums.pop();
97         pExpr ->nums.push(caculate(firstNum,secondNum,pExpr ->op));
98     }
99 }

 


转载于:https://www.cnblogs.com/codingMozart/p/6439738.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值