Evaluate the value of an arithmetic expression in Reverse Polish Notation.

本文详细介绍了如何使用栈数据结构解析逆波兰表达式,并计算出算术表达式的值。通过实例演示了逆波兰表达式转换为中缀表达式的过程,以及如何实现逆波兰表达式的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +, -, *, /. Each operand may be an integer or another expression.
Some examples:   ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9  
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
  */



#include<iostream>
#include<string>
#include<stack>
#include<vector>
using namespace std;
int cal(int num1,int num2,string ch)
{
	int result;
	if(ch=="+")
	{
		result=num1+num2;
	}
	else if(ch=="-")
	{
		result=num1-num2;
	}
	else if(ch=="*")
	{
		result=num1*num2;
	}
	else if(ch=="/")
	{
		result=num1/num2;
	}
	return result;
}
int RPN(vector<string> &tokens)
{
	int i;
	stack<int> opd;
	for(i=0;i<tokens.size();i++)
	{
		if(tokens[i]=="+"||tokens[i]=="-" ||tokens[i]=="*"||tokens[i]=="/")
		{
			int num2=opd.top();
			opd.pop();
			int num1=opd.top();
			opd.pop();
			opd.push(cal(num1,num2,tokens[i]));
		}
		else
		{
			opd.push(atoi(tokens[i].c_str()));
		}
	}
	return opd.top();
}
int main()
{
	string str[]={"2", "1", "+", "3", "*"};
	string str1[]={"4", "13", "5", "/", "+"};
	vector<string> tokens(str,str+sizeof(str)/sizeof(str[0]));
	vector<string> tokens1(str1,str1+sizeof(str1)/sizeof(str1[0]));
	/*
	for(vector<string>::iterator iter=tokens.begin();iter!=tokens.end();++iter)
	{
		cout<<*iter<<" ";
	}
	cout<<endl;
	*/

	cout<<RPN(tokens)<<endl;
	cout<<RPN(tokens1)<<endl;
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值