天天看點

POJ2694逆波蘭數

Description

逆波蘭表達式是一種把運算符前置的算術表達式,例如普通的表達式2 + 3的逆波蘭表示法為+ 2 3。逆波蘭表達式的優點是運算符之間不必有優先級關系,也不必用括号改變運算次序,例如(2 + 3) * 4的逆波蘭表示法為* + 2 3 4。本題求解逆波蘭表達式的值,其中運算符包括+ - * /四個。

Input

輸入為一行,其中運算符和運算數之間都用空格分隔,運算數是浮點數。

Output

輸出為一行,表達式的值。

可直接用printf("%f\n", v)輸出表達式的值v。

Sample Input

* + 11.0 12.0 + 24.0 35.0

Sample Output

1357.000000

代碼:

#include<stdio.h>
#include<stdlib.h>
double polan(){
		char s[10];
		scanf("%s",s);
		switch(s[0]){
		case '+':return polan()+polan();break;
		case '-':return polan()-polan();break;
		case '*':return polan()*polan();break;
		case '/':return polan()/polan();break;
		default:return atof(s);}
	}
int main(){
printf("%f\n",polan());
return 0;}
           

輸入資料後,輸出逆波蘭表達式的正常形式:

#include<stdio.h>
#include<stdlib.h>
char *polan(){
		char s[10];
		scanf("%s",s);
		switch(s[0]){
		case '+':printf("( "),polan(),printf("+"),polan(),printf(" )");break;
		case '-':printf("( "),polan(),printf("-"),polan(),printf(" )");break;
		case '*':printf("( "),polan(),printf("*"),polan(),printf(" )");break;
		case '/':printf("( "),polan(),printf("/"),polan(),printf(" )");break;
		default:printf("%s",s);return s;}
	}
int main(){
printf("%s\n",polan());
return 0;}