前缀表达式
例如((34+22) - (24/11) * 12) * 3.5 / (23 * 12/11)
写成前缀表达式就是 / * - + 34 22 * / 24 11 12 3.5 * 23 / 12 11
前缀表达式的运算法则就是如果读取的是一个运算符号,就向下寻找两个数据进行运算。
递归的思想
如何读取数据和字符
其实不用开很多字符数组。
用cin读取字符就可以了,进而在递归函数里面来处理这个字符。
可以开一个短一点的字符数组来储存数据或者运算符号然后传递给函数即可。
递归函数如何处理传递进来的数据或者运算符号
秉承一个思路:如果是运算符号就向下寻找两个数据,然后用相应的运算符号来激素那结果并且返回给上一个函数;如果是数字,就转换成浮点数返回给上一个函数。
实现方法
double solve()
{
cin >> digit_or_num;
if (digit_or_num[0] == '+')
return solve() + solve();
if (digit_or_num[0] == '-')
return solve() - solve();
if (digit_or_num[0] == '*')
return solve() * solve();
if (digit_or_num[0] == '/')
return solve() / solve();
else
return atof(digit_or_num);//将字符串转化为浮点数
}
我的脑回路
思考目的:每一个函数需要什么样的参数来实现代码的目的,这个题需要每次返回一个浮点数。如果是运算符号,就要获得两个浮点数,所以调用两次函数,分别获得一个浮点数;如果是数字,就可以返回一个合法的浮点数,供上一个函数利用。
代码
(悄咪咪)放上来递归函数的代码应该主函数不需要了吧,主函数只需要控制输出格式就行了。
后记
傻fufu的博主依然不知道怎么控制代码块的颜色。