中置表达式: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;
}