首页 > 代码库 > 求前缀表达式的值
求前缀表达式的值
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\n",mystack.top());147 }148 149 150 return 0;151 }
求前缀表达式的值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。