当前位置:首页 > 题解目录 > 正文内容

【题解】后缀表达式的值

亿万年的星光4年前 (2021-11-20)题解目录2247

【题目描述】


从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标志。

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

1331a.gif

栈中的变化情况:

1331b.gif


运行结果:-47

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


【输入描述】

一个后缀表达式。

【输出描述】

一个后缀表达式的值。

【样例输入】

16 9 4 3 +*-@


【样例输出】

-47

【题目分析】

  • 要计算出最终结果肯定是要后缀转中缀。然后再计算。

  • 后缀转中缀的规则如下:

            1.从左到右,遇到数就入栈,遇到操作符就出栈

            2.运算规则是    栈底元素 op 栈顶元素

  •  另外注意 字符转数字和数字转字符


【参考答案】


#include<iostream>
#include<stack>
#include<string>
using namespace std;

stack <long long> s;//因为数据最大是2的六十四次方

int main()
{
	string a;
	long long t = -1, m, n, ans, i = 0;
	getline(cin,a);//因为有空格所以用getline,否则直接cin就可,头文件string
	while (a[i] != '@')
	{
		if (a[i] >= '0' && a[i] <= '9')
		{
			if (t == -1)//最初或者当前元素是空格,直接结果压入栈
			{
				t = a[i] - '0';
				s.push(t);
			}
			else//当前不是空格,之前的数字变成整数压入栈
			{
				t = s.top();
				s.pop();
				t = t * 10 + (a[i] - '0');
				s.push(t);
			}
		}
		if (a[i] == ' ')
		{
			t = -1;
		}
		if (a[i] == '+')
		{
			m = s.top();s.pop();n = s.top();s.pop();
			ans = m + n;
			s.push(ans);

		}
		if (a[i] == '-')
		{
			m = s.top(); s.pop(); n = s.top(); s.pop();
			ans = n-m;
			s.push(ans);
		}
		if (a[i] == '*')
		{
			m = s.top(); s.pop(); n = s.top(); s.pop();
			ans = n*m;
			s.push(ans);
		}
		if (a[i] == '/')
		{
			m = s.top(); s.pop(); n = s.top(); s.pop();
			ans = n/ m;
			s.push(ans);
		}
		i++;
	}
	 cout<<s.top();
}


    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    标签: 数据结构
    分享给朋友:

    相关文章

    【题解】电池的寿命

    【题目描述】小S新买了一个掌上游戏机,这个游戏机由两节5号电池供电。为了保证能够长时间玩游戏,他买了很多5号电池,这些电池的生产商不同,质量也有差异,因而使用寿命也有所不同,有的能使用5个小时,有的可...

    哥德巴赫猜想

    【题目描述】哥德巴赫猜想的命题之一是:大于6 的偶数等于两个素数之和。编程将6~100所有偶数表示成两个素数之和。【输入描述】无【输出描述】分行输出例如:6=3+38=3+5…(每个数只拆开一次,请保...

    【题解】求车速问题

    【题目描述】一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859。两小时后里程表上出现了一个新的对称数。问该车的速度是多...

    【题解】演讲大赛评分

    【题目描述】最近"老王"很开心.他在大一的时候参加过数计学院的“软件小组”。告诉你个秘密,这个小组是个好地方,不但活动精彩而且有MM。 这不,这个小组举办了一个叫做“计算...

    【题解】核电站问题

    【题目描述】一个核电站有N个放核物质的坑,坑排列在一条直线上。如果连续3个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质。现在,请你计算:对于给定的N,求不发生爆炸的放置核物质的方案总数...

    【题解】车厢调度

    【题解】车厢调度

    【题目描述】有一个火车站,铁路如图所示,每辆火车从A驶入,再从B方向驶出,同时它的车厢可以重新组合。假设从A方向驶来的火车有n节(n<=1000)。分别按照顺序编号为1,2,3,...n。假定在...