顶部横幅广告
  • 微信
您当前的位置:首页 > 资讯

POJ 2694:逆波兰表达式

作者:三青 时间:2023-04-21 阅读数:人阅读

 

OpenJudge - 2694:逆波兰表达式

2694:逆波兰表达式 描述逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式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

提示:

可使用atof(str)把字符串转换为一个double类型的浮点数。atof定义在math.h中。

此题可使用函数递归调用的方法求解。

来源:

计算概论05

一、思路分析:

这道题需要我们做的,其实就是在输入中找出“运算符、数字、数字”这样的片段,然后根据运算符对两个数字进行进算,将计算结果放回原位置替代原来的片段,如此循环,直到只剩下一个数字。这个数字就是答案。

二、代码实现

使用递归将能够以很简洁方式实现以上思路,供参考:

来源:poj 2694 逆波兰表达式(递归)

#include<iostream>#include<cstdio>#include<cstdlib>//atof()的头文件using namespace std; double expe() { char s[30]; cin>>s; switch(s[0]) { case +: return expe()+expe(); case -: return expe()-expe(); case *: return expe()*expe(); case /: return expe()/expe(); default: return atof(s); break; } } int main() { printf("%lf\n",expe()); return 0; }

理工狗不想被人文素养拖后腿?不妨关注微信公众号:

为你读最好的书~

本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:dacesmiling@qq.com

标签:
微信

三青

当你还撑不起你的梦想时,就要去奋斗。如果缘分安排我们相遇,请不要让她擦肩而过。我们一起奋斗!

微信
阿里云