递归 逆波兰表达式

mac2024-08-13  60

中置表达式:1+2=3 前置:+ 1 2=3 后置:1 2 +=3

这道题说逆波兰表达式是前置就前置吧,题意就是输入一行,其中运算符和运算数直接都用空格分开,输出一个表达式的值。

思路就是用递归的思想,首先需要写出逆波兰表达式的定义: (1)一个数是一个逆波兰表达式,值为该数。 (2)“运算符 逆波兰表达式 逆波兰表达式 ”是逆波兰表达式,值为两个表达式的值运算的结果。

可以看出这是个递归定义,终止条件就是表达式为一个数的时候。因为是用空格隔开,所以代码就这样写,遇到运算符就递归。

#include<iostream> #include<cstdio> #include<cstdlib> using namespace std; double exp(){ char s[20]; cin>>s; switch(s[0]){ case '+':return exp()+exp(); case '-':return exp()-exp(); case '*':return exp()*exp(); case '/':return exp()/exp(); default :return atof(s); //atof的作用是将一个数字的字符串变成浮点型,需要头文件stdlib break; } } int main(){ printf("%lf",exp()); return 0; }
最新回复(0)