栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

1331:【例1-2】后缀表达式的值

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

1331:【例1-2】后缀表达式的值

题目

1331:【例1-2】后缀表达式的值
时间限制: 10 ms 内存限制: 65536 KB
【题目描述】
从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标志。

比如,16–9*(4+3)转换成后缀表达式为:16□9□4□3□+*–,在字符数组A中的形式为:

栈中的变化情况:

运行结果:-47

提示:输入字符串长度小于250,参与运算的整数及结果之绝对值均在264范围内,如有除法保证能整除。

【输入】
一个后缀表达式。

【输出】
一个后缀表达式的值。

【输入样例】
16 9 4 3 +*-@
【输出样例】
-47


题目分析:开一个类型为long long的栈,遇到数字就压栈,遇到符号放出栈顶两个元素,计算后再压栈即可。最后栈顶元素即为所求。


C++代码
#include
#include
using namespace std;
int main()
{
	stack st;
	char ch;
	long long n = 0;
	while ((ch = getchar()) != '@')
	{
		if (ch >= '0' && ch <= '9')
			n = n * 10 + ch - '0';
		else if (ch == ' ')
		{
			st.push(n);
			n = 0;
		}
		else
		{
			long long a = st.top();
			st.pop();
			long long b = st.top();
			st.pop();
			//注意,由于栈先进后出的特性,减法和除法时一定要把b放到前面!
			if (ch == '+')
				st.push(b + a);
			else if (ch == '-')
				st.push(b - a);
			else if (ch == '*')
				st.push(b * a);
			else if (ch == '/')
				st.push(b / a);
		}
	}
	cout << st.top();
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004897.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号