求前缀表达式的值

 

目录

 求前缀表达式的值

 问题描述 

 代码实现


求前缀表达式的值

 

问题描述 

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

输入格式:

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

输出格式:

输出前缀表达式的运算结果,或错误信息ERROR

输入样例:

+ + 2 * 3 - 7 4 / 8 4

输出样例:

13

 代码实现

#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
main(){
	char a[100],temp[100];
	stack<double> q; 
	gets(temp);
	//删除输入时的空格 
	int k=0;
	for(int i=0;temp[i]!='\0';i++){
		if(temp[i]!=' '){
		   a[k]=temp[i];
		   k++;			
		}
	}
	//求值 
	for(int i=k-1;i>=0;i--){
		if(a[i]=='+' ||a[i]=='-' ||a[i]=='*' ||a[i]=='/'){
			if(q.size()<2){
			   cout << "ERROR";
			   return 0;				
			}
			double x=q.top(); q.pop();
			double y=q.top(); q.pop();
			double num;
			if(a[i]=='+'){
				num=x+y;
				q.push(num);
				continue;
			}
			if(a[i]=='-'){
				num=x-y;
				q.push(num);
				continue;
			}
			if(a[i]=='*'){
				num=x*y;
				q.push(num);
				continue;
			}
			if(a[i]=='/'){
				if(y!=0){
					num=x/y;
					q.push(num);
					continue;										
				}
				cout << "ERROR";
				return 0;
			}			
		}
		q.push( a[i]-'0' );
	} 
	double ans=q.top();
	cout << ans << endl;   
	return 0;
} 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值