当前位置: 首页 > news >正文

后缀表达式求值

       后缀表达式,又称逆波兰式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行。

运用后缀表达式进行计算的具体做法:

建立一个操作数栈S。然后从左到右读表达式,如果读到操作数就将它压入栈S中,如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项操作数进行运算,再将运算的结果代替原栈顶的n项压入栈中。重复上面过程,如果后缀表达式读完且栈中只剩一个操作数,则该数就是运算结果;如果后缀表达式读完但是栈中操作数多于一个,则后缀表达式错误;如果栈中操作数只剩一个,但是后缀表达式还未读完且当前运算符为双元操作符,则后缀表达式同样错误。

输入格式:

在一行中输入一个以#号结束的非空后缀式,#不属于表达式的一部分,操作数和运算符都以空格分隔,运算数为绝对值不超过100的整数,运算符仅有+、-、*、/ 四种。

输出格式:

输出后缀式计算结果,所有的计算都只取结果的整数部分。题目保证计算的中间和最后结果的绝对值都不超过109。

如果执行除法时出现分母为零的非法操作,则在一行中输出:Error: X/0,X是当时的分子。

如果后缀表达式中运算符多了或者少了,则在一行中输出:Expression Error: X,X是当时栈顶元素。

输入样例1:

5 -2 + 3 * #

输出样例1:

9

输入样例2:

5 -2 2 + / #

输出样例2:

Error: 5/0

输入样例3:

5 -1 3 + / - * #

输出样例3:

Expression Error: 2
#include<iostream>
#include<string>
#include<sstream>
#include<stack>
using namespace std;
int judge(string ch)
{if (ch == "+" || ch == "-" || ch == "*" || ch == "/")return 1;elsereturn 0;
}
int jisuan(int n1, int n2, string ch)
{if (ch == "+")return n1 + n2;else if (ch == "-")return n1 - n2;else if (ch == "*")return n1 * n2;elsereturn n1 / n2;
}
int main()
{stack<int> num;int a,k=0;int n1, n2, n3;string ch;while (cin >> ch){if (ch == "#")break;if (!judge(ch)){stringstream stream;stream << ch; stream >> a;num.push(a);}else{n1 = num.top();num.pop();if (num.empty()){cout << "Expression Error: "<<n1;break;}n2 = num.top();num.pop();if (n1 == 0 && ch == "/"){cout << "Error: " << n2 << "/" << n1;break;}else{n3 = jisuan(n2, n1, ch);num.push(n3);}}}if (num.size() < 2&&ch=="#")cout << num.top() << endl;if (num.size() >= 2&&ch=="#")cout<< "Expression Error: " << num.top();
}

 

http://www.lryc.cn/news/175284.html

相关文章:

  • 基于springboot+vue的信息技术知识赛系统
  • 基于YOLOv8模型的垃圾满溢检测系统(PyTorch+Pyside6+YOLOv8模型)
  • 面试算法14:字符串中的变位词
  • 中国社科院大学-美国杜兰大学金融管理硕士暨能源管理硕士项目2023年毕业典礼
  • 蓝桥杯 题库 简单 每日十题 day10
  • 聊聊并发编程——多线程之synchronized
  • CompletableFuture-通用异步编程
  • Vue3 封装 element-plus 图标选择器
  • 超详细C语言实现——通讯录
  • zabbix监控添加监控项及其监控Mysql、nginx
  • Docker 部署 MongoDB 服务
  • QUIC协议报文解析(三)
  • pytorch迁移学习训练图像分类
  • SQL 如何提取多级分类目录
  • 从中序遍历和后序遍历构建二叉树
  • 《计算机视觉中的多视图几何》笔记(11)
  • UE5 ChaosVehicles载具研究
  • 数据通信——应用层(域名系统)
  • Visual Studio 更新:远程文件管理器
  • ChatGPT追祖寻宗:GPT-3技术报告要点解读
  • java easyexcel 导出多级表头
  • rar格式转换zip格式,如何做?
  • Java中的构造方法
  • 【Java】fastjson
  • JMeter之脚本录制
  • 计算机网络的相关知识点总结
  • WPF实现轮播图(图片、视屏)
  • 【Vue.js】使用Element搭建首页导航左侧菜单
  • Spring MVC常见面试题
  • Java基础面试题精选:深入探讨哈希表、链表和接口等