1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <string.h> 4 #include <cstdio> 5 #include <stack> 6 #include <cmath> 7 8 using namespace std; 9 stack<int> instack; 10 stack<double> mystack; 11 12 void stack(stack<int> mystack) 13 { 14 if(mystack.size()>=0) 15 { 16 int n=mystack.top(); 17 printf("%d",n); 18 mystack.pop(); 19 } 20 } 21 22 int main() 23 { 24 25 int i=0; 26 int dotpos=0; 27 char str[40]; 28 while(gets(str)) 29 { 30 for(i=strlen(str)-1;i>=0;i--) 31 { 32 if(str[i]=='.') 33 { 34 dotpos=instack.size(); 35 continue; 36 } 37 38 if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/') 39 { 40 if(str[i]=='-'&& instack.size()!=0) 41 { 42 int icount=0; 43 double itemp=0; 44 int len=instack.size(); 45 while(instack.size()>0) 46 { 47 double inttemp=instack.top(); 48 instack.pop(); 49 itemp=inttemp*pow(10,len-1-icount)+itemp; 50 icount++; 51 } 52 itemp=itemp*-1; 53 if(dotpos!=0) 54 { 55 mystack.push(itemp / pow(10,dotpos)); 56 dotpos=0; 57 } 58 else 59 mystack.push(itemp); 60 continue; 61 62 } 63 64 if(str[i]=='+'&& instack.size()!=0) 65 { 66 int icount=0; 67 double itemp=0; 68 int len=instack.size(); 69 while(instack.size()>0) 70 { 71 double inttemp=instack.top(); 72 instack.pop(); 73 itemp=inttemp*pow(10,len-1-icount)+itemp; 74 icount++; 75 } 76 if(dotpos!=0) 77 { 78 mystack.push(itemp / pow(10,dotpos)); 79 dotpos=0; 80 } 81 else 82 mystack.push(itemp); 83 continue; 84 85 } 86 if(mystack.size()<2) 87 { 88 printf("ERROR"); 89 return 0; 90 } 91 double a=mystack.top(); 92 mystack.pop(); 93 double b=mystack.top(); 94 mystack.pop(); 95 double r=0; 96 switch(str[i]) 97 { 98 case '+': r=a+b; break; 99 case '-':r=a-b; break; 100 case '*':r=a*b;break; 101 case '/': 102 if(b==0) 103 { 104 printf("ERROR"); 105 return 0; 106 } 107 else r= a / b ; 108 break; 109 } 110 111 mystack.push(r); 112 continue; 113 } 114 if(str[i]==' ') 115 { 116 int icount=0; 117 double itemp=0; 118 int len=instack.size(); 119 while(instack.size()>0) 120 { 121 double inttemp=instack.top(); 122 instack.pop(); 123 itemp=inttemp*pow(10,len-1-icount)+itemp; 124 icount++; 125 } 126 if(len!=0) 127 { 128 if(dotpos!=0) 129 { 130 mystack.push(itemp / pow(10,dotpos)); 131 dotpos=0; 132 } 133 else 134 mystack.push(itemp); 135 } 136 continue; 137 } 138 139 if(str[i]>='0'&&str[i]<='9') 140 { 141 instack.push(str[i]-'0'); 142 continue; 143 144 } 145 } 146 printf("%.1lf ",mystack.top()); 147 } 148 149 150 return 0; 151 }