问题描述:
逆波兰表达式是一种吧运算符前置的算术表达式,例如普通的表达式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。