NOI-OJ 2.2 ID:1696 逆波兰表达式

思路

  • 很容易看出规律,一个运算符出现,其后就一定需要左值和右值,而左值和右值有可能还是运算符,这就需要继续递归。递归终止的条件就是遇到数字。

  • 逆波兰表达式其实是构造成了一颗二叉树

逆波兰表达式构造成的二叉树

例程

#include<iostream>
#include<cstdlib>
												//atof函数用于将以字符数组形式
												//存在的浮点数转化为浮点数
												//cstdlib库中提供了atof函数 
using namespace std;
double nbl(){									//逆波兰表达式函数 
	char s[100];
	double num;
	scanf("%s", s);
	if(s[0]=='+')		return nbl()+nbl();		//如果读到了运算符就递归 
	if(s[0]=='-')		return nbl()-nbl();
	if(s[0]=='*')		return nbl()*nbl();
	if(s[0]=='/')		return nbl()/nbl();
	return atof(s);								//临界点是读到了浮点数 
}
int main(){
	printf("%f\n", nbl());
	return 0; 
}
posted @ 2017-04-14 16:52  LFYZOI题解  阅读(481)  评论(0编辑  收藏  举报