逆波兰表达式poj

问题描述:

逆波兰表达式是一种吧运算符前置的算术表达式,例如普通的表达式2+3的逆波兰表示为+23.逆波兰表达式的优点是运算符之间不必有优先级的关系,也不必有括号改变运算次序,例如(2+3)*4的逆波兰表示法为*+2 3 4.本题求解的逆波兰表达式的值。

输入数据:

输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。

输出要求:

输出为一行,即表达式的值。

输入样例:

* + 11.0 12.0 +24.0 35.0+

输出样例:

1357.000000

 

解题代码:

#include<stdio.h>
#include<math.h>
//#include<stdlib.h>

double exp()
{
	char a[10];
	scanf("%s",a);
	switch(a[0])
	{
	case '+': return exp()+exp();
	case '-': return exp()-exp();
	case '*': return exp()*exp();
	case '/': return exp()/exp();
	default : return atof(a);
	}
}


int main()
{
	double ans;
	ans=exp();
	printf("%f\n",ans);
	return 0;
}


 

将题目进行改进: 输入数据后,输出逆波兰表达式的常规形式。

#include<stdio.h>

char * exp()
{
	char a[10];
	scanf("%s",a);
	switch(a[0])
	{
	case '+':printf(" ("),exp(),printf("+"),exp(),printf(") ");  break;
	case '-':printf(" ("),exp(),printf("-"),exp(),printf(") "); break;
	case '*':printf(" ("),exp(),printf("*"),exp(),printf(") ");  break;
	case '/':printf(" ("),exp(),printf("/"),exp(),printf(") ");  break;
	default :printf("%s",a);return a;
	}
}
int main()
{
	exp();
	return 0;
}


 欢迎大家积极留言,欢迎喜欢acm的战友  以及喜欢编程的同志 同学 加我qq:827552788

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值