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

后缀表达式 C++ 蓝桥杯 栈

#include<iostream>
#include<string>
#include<stack>
using namespace std;
#define int long long
signed main() {
	string s;
	stack<int>stk;
	int a = 0, b = 0;
	while (cin >> s) {
		//  遇到数字就入栈
		if (s[0] >= '0' && s[0] <= '9') {
			stk.push(stol(s));
		}
		//  遇到符号就运算
		else {
			for (int i = 0; i < s.size(); i++) {
				if (s[i] == '@') break;
				b = stk.top(); stk.pop();
				a = stk.top(); stk.pop();
				if (s[i] == '+') {
					stk.push(a + b);
				}
				else if (s[i] == '-') {
					stk.push(a - b);
				}
				else if (s[i] == '*') {
					stk.push(a * b);
				}
				else if (s[i] == '/') {
					stk.push(a / b);
				}
			}
		}
	}
	cout << stk.top();
	return 0;
}

注意知识点

string头文件下

stol():string to long long   字符串转成long long类型

stoi():string to int              字符串转成 int 类型

宏观思路:遇到数字就入栈,遇到字符就运算。

详细思路——第一步:涉及输入的有数字,运算符,以及@,所以接受输入量的变量最好开string类型。本题数据绝对值在2^64次方,所以用long long来存储数据。不妨直接宏定义#define int long long

这个时候需要注意主函数返回值int需要写成signed。因为int 在预编译时会被替换成long long(在写了这个#define int long long时)

详细思路——第二步:while循环输入字符串s,判断s[0]字符串首字符是否是在字符‘0’到字符’9‘之间,如果是,即入栈这个数(这里压入的是stol(s))。否则遇到运算符就运算,这里需要注意运算符可能是连续出现的,在一个字符串里,所以需要for循环来遍历每个字符,把栈顶元素赋值给b,再弹出栈顶元素,再将栈顶元素赋值给a

因为比如:   3  4  /   它求的是3/4的值   所以先给b赋值,再给a赋值

       比如:   12   3  -    它求的是12-3的值,入栈是先12再3,出栈是先3再12   先给b赋值为3,再给a赋值为12,所以压入栈中为12-3

乘法和加法顺序没影响,除法和减法,顺序有影响。)

再弹出栈顶元素,if条件分支判断,如果s[i]=='+',就将a+b压入栈中,如果s[i]=='-',就将a-b压入栈中,如果s[i]=='*',就将a*b压入栈中,如果s[i]=='/',就将a/b压入栈中。

详细思路——第三步:最后还有一个@符号,需要特判,如果s[i]=='@',那么就break,跳出循环。

详细思路——第四步:最后输出栈顶元素,即是表达式的值。

完结!!!⠀՞⸝⸝. .⸝⸝՞˳ഒ

我们也许没法依照预定的日子如期抵达我们的港口,但终归航行在正确的线路上。


http://www.kler.cn/a/534156.html

相关文章:

  • Java 面试之结束问答
  • idea分析sql性能
  • 鸿蒙Harmony-Refresh 容器组件
  • springboot中路径默认配置与重定向/转发所存在的域对象
  • 【网络编程】Java高并发IO模型深度指南:BIO、NIO、AIO核心解析与实战选型
  • ubuntu22.40安装及配置静态ip解决重启后配置失效
  • JVS低代码逻辑引擎多种业务场景触发案例配置:涵盖列表页按钮、表单数据、流程审批、外部API接口调用等
  • Cookie及Session---笔记
  • Java面试题基础篇3:10道基础面试题
  • 安装和卸载RabbitMQ
  • 基于Javascript的封装、方法重载、构造方法
  • 【ArcGIS Pro简介2】
  • 1. Kubernetes组成及常用命令
  • DeepSeek 与 ChatGPT 对比分析
  • Linux 常用命令与实战教程
  • HTTP请求响应周期步骤
  • 基于Ubuntu2404搭建Zabbix7.2
  • 1. 初识spark
  • 在 Spring Boot 项目中,bootstrap.yml 和 application.yml文件区别
  • 智慧楼宇的监控都用上3D形式了,2D要摒弃了。
  • 电脑开机提示按f1原因分析及终极解决方法来了
  • 【力扣】49.字母异位词分组
  • 消费kafka消息示例
  • 100.6 AI量化面试题:如何评估AI量化模型的过拟合风险?
  • 【Elasticsearch】Geo-distance聚合
  • 如何查看docker的containers 那个日志最大