关于前缀表达式

前缀表达式

例如((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的博主依然不知道怎么控制代码块的颜色。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值