1198:逆波兰表达式

简介: 1198:逆波兰表达式

1198:逆波兰表达式    <这里应该是波兰表达式(前缀表达式),而逆波兰指的是后缀表达式>

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。

【输入】

输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。

【输出】

输出为一行,表达式的值。

可直接用printf("%f\n", v)输出表达式的值v。

【输入样例】

* + 11.0 12.0 + 24.0 35.0

【输出样例】

1357.000000

【来源】

No

1. //递归法
2. #include<bits/stdc++.h>
3. using namespace std;
4. char s[1001];
5. double v=0;
6. double bol()
7. {
8.  scanf("%s",s);
9.  switch(s[0]){
10.     case'+':return bol()+bol();break;
11.     case'-':return bol()-bol();break;
12.     case'*':return bol()*bol();break;
13.     case'/':return bol()/bol();break;
14.     default:v=atof(s);//atof(s)将字符串s转换为double的浮点数 
15.   }
16.   return v;
17. }
18. int main()
19. {
20.   printf("%.6lf",bol());
21.   return 0;
22.  }
1. //手工解析模拟 逆推 栈
2. #include<bits/stdc++.h>
3. using namespace std;
4. char s[1001];
5. double v=0;
6. void get_value(stack<double> &s,double &a ,double &b)
7. {
8.  a=s.top();
9.  s.pop();
10.   b=s.top();
11.   s.pop();
12. }
13. int main()
14. {
15.   int k=0;
16.   string exp[100];
17.   stack<double> st;
18.   double a,b;
19.   cin.getline(s,1000,'\n'); 
20.   for(int i=strlen(s)-1;i>=0;i--) {
21.     if(s[i]==' ')   k++;
22.     else  exp[k].insert(exp[k].begin(),s[i]); 
23.   }
24.   for(int i=0;i<=k;i++){
25.     if(exp[i]=="+"){
26.       get_value(st,a,b);
27.       st.push(a+b);
28.     }
29.     else if (exp[i]=="-"){
30.       get_value(st,a,b);
31.       st.push(a-b);
32. 
33.     }
34.     else if (exp[i]=="*"){
35.       get_value(st,a,b);
36.       st.push(a*b);
37.     }
38.     else if (exp[i]=="/"){
39.       get_value(st,a,b);
40.       st.push(a/b);
41.     }
42.     else
43.       st.push(atof(exp[i].c_str()));
44.   }
45.   printf("%f",st.top());
46.   return 0;
47.  }

 

相关文章
|
机器学习/深度学习 人工智能 自然语言处理
机器学习之线性回归与逻辑回归【完整房价预测和鸢尾花分类代码解释】
机器学习之线性回归与逻辑回归【完整房价预测和鸢尾花分类代码解释】
|
安全 数据安全/隐私保护 芯片
微信读书电脑版,来了!
微信读书电脑版,来了!
|
存储 安全 算法
KeyManager - 免费申请证书-支持泛域名
KeyManager - 免费申请证书-支持泛域名
1234 0
KeyManager - 免费申请证书-支持泛域名
|
分布式计算 资源调度 Hadoop
Hadoop: 启动后发现没有DataNode
Hadoop: 启动后发现没有DataNode
958 0
Hadoop: 启动后发现没有DataNode
|
存储 分布式计算 Hadoop
Hadoop节点名称节点(NameNode)
【5月更文挑战第17天】
751 3
|
Web App开发 JavaScript 前端开发
Node.js 文件系统操作指南
Node.js 文件系统操作指南
327 0
|
人工智能 算法 BI
一篇带你速通差分算法(C/C++)
一篇带你速通差分算法(C/C++)
|
数据采集 机器学习/深度学习 算法
【计算机二级Python】模拟试卷第4套选择题
第四套计算机二级Python考试的模拟选择题,包含40道题目,内容涉及需求分析、数据流图、黑盒测试、E-R图、二叉树、算法复杂度、Python文件后缀、浮点数精度、保留字、字符编码、循环结构、第三方库、列表操作、文件读写、CSV文件、turtle图形库、网络爬虫、数据分析、机器学习、字符串操作、类型转换、随机数、列表推导、字典、字符串格式化等方面,旨在帮助考生复习和准备考试。
269 4
|
运维 Devops jenkins
DevOps实践之路:从自动化部署到持续交付
【7月更文挑战第16天】在当今快速迭代的软件生命周期中,DevOps已经成为提升效率、缩短产品上市时间的关键因素。本文将深入探讨DevOps的核心理念与实践,特别是如何通过自动化工具实现代码的持续集成和部署,以及如何构建有效的持续交付流程。我们将从理论出发,结合实际案例分析,为读者提供一套完整的DevOps落地方案。