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;
}