Acwing---3302. 表达式求值

表达式求值

  • 1.题目
  • 2.基本思想
  • 3.代码实现

1.题目

给定一个表达式,其中运算符仅包含 +,-,*,/(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。

注意:

  • 数据保证给定的表达式合法。
  • 题目保证符号 - 只作为减号出现,不会作为负号出现,例如,-1+2,(2+2)*(-(1+1)+2) 之类表达式均不会出现。
  • 题目保证表达式中所有数字均为正整数。
  • 题目保证表达式在中间计算过程以及结果中,均不超过 2^31−1
  • 题目中的整除是指向 0 取整,也就是说对于大于 0的结果向下取整,例如 5/3=1,对于小于 0 的结果向上取整,例如 5/(1−4)=−1
  • C++和Java中的整除默认是向零取整;Python中的整除//默认向下取整,因此Python的eval()函数中的整除也是向下取整,在本题中不能直接使用。

输入格式
共一行,为给定表达式。

输出格式
共一行,为表达式的结果。

数据范围
表达式的长度不超过 1 0 5 。 表达式的长度不超过 10^5。 表达式的长度不超过105

所有操作保证合法。 所有操作保证合法。 所有操作保证合法。

输入样例:

(2+2)*(1+1)

输出样例:

8

2.基本思想

基本思路:针对这一问题,我们运算的时候是考虑运算符优先级问题的,那么就得把优先级高的数据先处理,很自然地就选择了栈来倒序。
我们人在做这样计算题的时候,往往也是先去寻找乘除先计算,写出计算结果,最后再看加减运算,那么自然乘除比加减高上一级,在此之上是括号
在这个思路上,去看代码就更为容易看懂了

3.代码实现

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Stack;public class Main {static Stack<Integer> num = new Stack<>();static Stack<Character> opt = new Stack<>();static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));private static void eval() {//计算int num1 = num.pop();int num2 = num.pop();char x = opt.pop();if (x == '*') num.push(num1 * num2);else if (x == '/') num.push(num2 / num1);else if (x == '+') num.push(num2 + num1);else if (x == '-') num.push(num2 - num1);}public static void main(String[] args) throws IOException {String s = br.readLine();int len = s.length();HashMap<Character, Integer> map = new HashMap<>();map.put('+', 1);map.put('-', 1);map.put('*', 2);map.put('/', 2);for (int i = 0; i < len; i++) {char c = s.charAt(i);//取出每个 opt 或者 numif (Character.isDigit(c)) {int x = 0, j = i;//检查当前字符是否是数字且没有超出字符串的长度: 由于输入数字可能是多位数,使用 x * 10 来将之前的数字向左移动一位,然后加上当前字符对应的数字值while (j < len && Character.isDigit(s.charAt(j))) x = x * 10 + s.charAt(j++) - '0';num.push(x);i = j - 1;} else if (s.charAt(i) == '(') {opt.push(s.charAt(i));} else if (s.charAt(i) == ')') {while (opt.peek() != '(') eval();opt.pop();} else if (opt.isEmpty()) {opt.push(s.charAt(i));} else {//运算符非空 并且 栈顶元素的优先级 大于 当前元素的优先级while (opt.size() != 0 && opt.peek() != '(' && (map.get(opt.peek()) >= map.get(s.charAt(i)))) eval();opt.push(s.charAt(i));}}while (opt.size() > 0) eval();System.out.println(num.peek());}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/667816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器和云服务器哪个更安全?

随着云计算技术的不断发展&#xff0c;越来越多的企业开始选择使用云服务器来存储和处理数据。然而&#xff0c;对于一些企业来说&#xff0c;他们可能更倾向于使用传统的服务器。在这种情况下&#xff0c;安全性成为了一个重要的考虑因素。那么&#xff0c;服务器和云服务器哪…

mac下载工具:JDownloader 2 for Mac 中文版

JDownloader是一款开源的下载管理工具&#xff0c;主要使用Java编程语言开发&#xff0c;因此它能够在支持Java的操作系统上运行&#xff0c;包括Windows、Linux和Mac OS。这款软件专门为那些需要通过网盘下载文件的用户提供便利&#xff0c;它支持众多流行的网盘服务&#xff…

11、SystemInit函数解读

1、系统时钟初始化函数&#xff1a;SystemInit(); 使用库函数的时候&#xff0c;在系统启动之后会自动调用 2、首先如果使用外部时钟源HSE&#xff0c;要配置外部晶振频率&#xff1a;stm32f4xx.h 3、初始化之前首先通过宏定义定义下面变量来定义系统时钟频率&#xff1a; …

python将Excel文档转成.db数据库文件

python实现Excel转.db数据库 1.程序实现 程序实现以下功能&#xff1a; 1.读取一个Excel文件,文件名通过函数传参数传入 2.将文件读取的内容保存到一个数据库文件中 3.数据库的文件名以传入的Excel文件的文件名命名 4.将excel文件的工作簿的名字作为数据库的表单名 5.将Excel…

idea修改项目git地址

大家好&#xff0c;今天给大家分享的知识是如何在idea中修改项目的git地址。 一、修改地址 首先我们先找到菜单栏中Git选项&#xff0c;然后点击管理远程&#xff08;Manage Remote&#xff09; 之后双击origin之后就可以定义名称或者URL了。

电路设计(10)——超温报警电路的proteus仿真

1.题目背景 在现实生活中&#xff0c;常有一种工程技术&#xff0c;即带有自动温度补偿的设备&#xff0c;能在规定温度内正常工作。但是为了设备安全&#xff0c;需设定工作的上限温度&#xff0c;万一温控补偿失效&#xff0c;设备温度一旦超出上限温度时&#xff0c;便立即切…

前端excel带样式导出 exceljs 插件的使用

案例 <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width, initial-scale1"><title>exceljs 使用</title></head><body><button …

ReactNative实现宽度变化实现的动画效果

效果如上图所示&#xff0c;通过修改设备宽度实现动画效果 import React, {useRef, useEffect, useState} from react; import {Animated, Text, View, Image} from react-native;const FadeInView props > {const fadeAnim useRef(new Animated.Value(0)).current;React…

PyTorch、NCNN、Numpy三者张量的shape

目录 一、PyTorch二、NCNN三、Numpy 一、PyTorch 在 PyTorch 中&#xff0c;张量&#xff08;Tensor&#xff09;的形状通常按照 (N, C, H, W) 的顺序排列&#xff0c;其中&#xff1a; N 是批量大小&#xff08;batch size&#xff09; C 是通道数&#xff08;channel number…

【Node系列】连接数据库

文章目录 一、连接MySql二、连接MongoDB三、相关链接 一、连接MySql 首先&#xff0c;您需要安装mysql模块。在命令行中&#xff0c;导航到您的项目目录并输入以下命令&#xff1a; npm install mysql然后&#xff0c;您可以在Node.js代码中使用mysql模块来连接MySQL数据库、…

在vs code的terminal,debug执行python main.py --train True

GPT4告诉我&#xff1a; 在VS Code中以debug状态执行带有参数&#xff08;如--train&#xff09;的main.py文件&#xff0c;你需要在launch.json配置文件中正确设置参数。以下是详细步骤&#xff1a; 打开你的main.py文件&#xff1a;确保你的main.py文件已经在VS Code中打开…

鸿蒙 状态管理-应用存储

前提&#xff1a;基于官网3.1/4.0文档。参考官网文档 基于Android开发体系来进行比较和思考。&#xff08;或有偏颇&#xff0c;自行斟酌&#xff09; 1.概念 装饰器&#xff08;State、Prop等&#xff09;是用于组件的状态修饰符&#xff0c;本篇讲的是更上一层级别&#xff…

牛客周赛 Round 31(A~F)

文章目录 ABCDEF A #include <bits/stdc.h> #define int long long #define rep(i,a,b) for(int i (a); i < (b); i) #define fep(i,a,b) for(int i (a); i > (b); --i) #define pii pair<int, int> #define pll pair<long long, long long> #defi…

华为自动驾驶干不过特斯拉?

文 | AUTO芯球 作者 | 李诞 什么&#xff1f; 华为的智能驾驶方案干不过蔚小理&#xff1f; 特斯拉的智能驾驶[FSD]要甩中国车企几条街&#xff1f; 这华为问界阿维塔刚刚推送“全国都能开”的城区“无图 NCA” 就有黑子来喷了 这是跪久了站不起来了吧 作为玩车14年&…

Pytorch: nn.dropout

Dropout 是一种用于深度学习模型的正则化技术&#xff0c;旨在减少模型对特定训练样本的过度拟合。其主要作用包括&#xff1a; 减少过拟合&#xff1a; Dropout 阻止神经网络对某些特定输入值过度依赖&#xff0c;从而提高模型的泛化能力。通过随机地失活神经元&#xff08;将…

flutter开发实战-可扩展popup弹窗template模版样式

flutter开发实战-可扩展popup弹窗template模版样式 最近在看到一个flutter_beautiful_popup&#xff0c;可以美化弹窗窗口样式。该插件通过一个template模版的类BeautifulPopupTemplate作为抽象的base类。 一、基类BeautifulPopupTemplate 在BeautifulPopupTemplate中&…

1-1 动手学深度学习v2-线性回归-笔记

简化核心模型 假设1: 影响房价的关键因素是卧室个数&#xff0c;卫生间个数和居住面积&#xff0c;记为 x 1 x_{1} x1​&#xff0c; x 2 x_{2} x2​&#xff0c; x 3 x_{3} x3​假设2: 成交价是关键因素的加权和 y w 1 x 1 w 2 x 2 w 3 x 3 b yw_{1}x_{1}w_{2}x_{2}w_{3…

RabbitMQ——基于 KeepAlived + HAProxy 搭建 RabbitMQ 高可用负载均衡集群

一、集群简介 1.1 集 群架构 当单台 RabbitMQ 服务器的处理消息的能力达到瓶颈时&#xff0c;此时可以通过 RabbitMQ 集群来进行扩展&#xff0c;从而达到提升吞吐量的目的。 RabbitMQ 集群是一个或多个节点的逻辑分组&#xff0c;集群中的每个节点都是对等的&#xff0c;每…

目标检测及相关算法介绍

文章目录 目标检测介绍目标检测算法分类目标检测算法模型组成经典目标检测论文 目标检测介绍 目标检测是计算机视觉领域中的一项重要任务&#xff0c;旨在识别图像或视频中的特定对象的位置并将其与不同类别中的对象进行分类。与图像分类任务不同&#xff0c;目标检测不仅需要…

OfficeWeb365 Readfile 任意文件读取漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…