博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求前缀表达式的值
阅读量:6443 次
发布时间:2019-06-23

本文共 2475 字,大约阅读时间需要 8 分钟。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 8 using namespace std; 9 stack
instack; 10 stack
mystack; 11 12 void stack(stack
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 }

 

转载于:https://www.cnblogs.com/been/p/4245479.html

你可能感兴趣的文章
ucfirst() 函数
查看>>
bootstrap-导航条层次的导航
查看>>
git rm使用
查看>>
xss***代码
查看>>
Python学习网站
查看>>
mybatis基础(一)
查看>>
Python的Django框架中的Context使用
查看>>
我的友情链接
查看>>
linux常用命令
查看>>
Docker在Windows系统下的安装及简单使用介绍
查看>>
CentOS用yum安装X Window
查看>>
gpfs 修改 副本数
查看>>
Ubuntu16.4安装Wordpress
查看>>
模块和包
查看>>
socket编程总结
查看>>
逻辑回归模型(LR)
查看>>
[读书笔记]JavaScript 闭包(Closures)
查看>>
Django restfulframework 开发相关知识 整理
查看>>
linux信息查看手记
查看>>
Delphi考虑sql注入 QuotedStr
查看>>