HDU 1237 简单计算器(stack)

2015-01-27 10:19:27 · 作者: · 浏览: 10
Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。

Input 测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。

Output 对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。

Sample Input
1 + 2
4 + 2 * 5 - 7 / 11
0

Sample Output
3.00
13.36

Source 浙大计算机研究生复试上机考试-2006年
Recommend JGShining | We have carefully selected several similar problems for you: 1230 1235 1234 1236 1229
这个题困扰我几天了,看了别人的博客,这个方法太厉害了,居然不保存 字符数组
#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
       
         #include
        
          #include
         
           #define L(x) (x<<1) #define R(x) (x<<1|1) #define MID(x,y) ((x+y)>>1) #define eps 1e-8 using namespace std; #define N 10005 int main() { int i; char c,cc; double a,b; while(~scanf("%lf%c",&a,&c)) { if(fabs(a-0)
          
           q; q.push(a); scanf("%c%lf",&c,&a); if(c=='+') q.push(a); else if(c=='-') q.push(a*(-1)); else { double cur=q.top(); q.pop(); if(c=='*') q.push(cur*a); else q.push(cur/a); } while(scanf("%c",&c)) { if(c=='\n') break; scanf("%c%lf",&c,&a) ; if(c=='+') q.push(a); else if(c=='-') q.push(a*(-1)); else { double cur=q.top(); q.pop(); if(c=='*') q.push(cur*a); else q.push(cur/a); } } double ans=0; while(!q.empty()) { ans+=q.top(); q.pop(); } printf("%.2lf\n",ans); } return 0; }