POJ 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一、思路分析:
这道题需要我们做的,其实就是在输入中找出“运算符、数字、数字”这样的片段,然后根据运算符对两个数字进行进算,将计算结果放回原位置替代原来的片段,如此循环,直到只剩下一个数字。这个数字就是答案。
二、代码实现
使用递归将能够以很简洁方式实现以上思路,供参考:
#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
上一篇:给你打诈骗电话的都是哪里人?
下一篇:江西乐安发生一起重大刑案