PTA 求前缀表达式的值 (25分)

5-21 求前缀表达式的值   (25分)
 

算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。

输入格式:

输入在一行内给出不超过30个字符的前缀表达式,只包含+-*\以及运算数,不同对象(运算数、运算符号)之间以空格分隔。

输出格式:

输出前缀表达式的运算结果,保留小数点后1位,或错误信息ERROR

输入样例:

+ + 2 * 3 - 7 4 / 8 4

输出样例:

13.0



#include "iostream"
#include "algorithm"
#include "iomanip"
using namespace std; 

float f()
{
   char A[10];
   cin>>A; 

   if(A[1]==NULL)
   {
   switch(A[0])
   {
   case'*': return f()*f();  
   case'/': 
	   {
        float fenzi,fenmu;
		fenmu=f();
		fenzi=f();
        if(fenzi==0)
		{
		 cout << "ERROR"<<endl;
		 exit(0);
		}
        else return fenmu/fenzi;

	   }
   case'-': return f()-f();
   case'+': return f()+f();
   default: return atof(A);
   }
   }
   else
   {
     if(A[0]=='+' || A[0]=='-')
	 {
        char flag=A[0];
		int i=0;
        while(A[i])
		{     
         A[i]=A[i+1];
         i++;
		}
        if(flag=='-')
		return 0-atof(A);
		else
		return atof(A);

	 }
     else return atof(A);
   }
};

int main( )
{    
   
	float Sum;
	Sum=f();
	cout<<fixed<<setprecision(1)<<Sum<<endl;

     
	return 0;
}



猜你喜欢

转载自blog.csdn.net/qq_34125999/article/details/51460408
今日推荐