当前位置:网站首页>1331:【例1-2】后缀表达式的值

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

2022-07-08 00:57:00 一位13岁的编程爱好者

题目

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 +*[email protected]
【输出样例】
-47


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


C++代码

#include<iostream>
#include<stack>
using namespace std;
int main()
{
    
	stack<long long> 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;
}
原网站

版权声明
本文为[一位13岁的编程爱好者]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_54121864/article/details/125597972