首页 > 试题广场 >

四则运算

[编程题]四则运算
  • 热度指数:135105 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}对于输入的表达式,保证其形式合法、计算过程中全程合法、计算过程中不需要使用到实数、结果 {\rm ans} 满足 -10^3 \leqq {\rm ans} \leqq 10^3 。直接输出计算结果。

\hspace{15pt}保证表达式字符串由 0-9 的数字、加法 \texttt{`+'} 、减法 \texttt{`-'} 、乘法 \texttt{`*'} 、除法 \texttt{`/'} 、小括号 \texttt{`('},\texttt{`)'} 、中括号 \texttt{`['},\texttt{`]'} 、大括号 \texttt{`\{'},\texttt{`\}'} 组成,且运算符之间没有空格。

输入描述:
\hspace{15pt}输入一个长度为 1 \leqq {\rm len}(s) \leqq 10^3 、由题面所述符号构成的字符串,代表一个表达式。


输出描述:
\hspace{15pt}输出一个整数 \rm ans ,代表计算的答案。满足 -10^3 \leqq {\rm ans} \leqq 10^3
示例1

输入

3+2*{1+2*[-4/(8-6)+7]}

输出

25

说明

\hspace{15pt}在这个样例中,计算过程为:\begin{array}{ll}<br />& 3+2\times\big\{1+2\times{[-4 \div (8-6)+7]}\big\} \\<br />= & 3 + 2 \times \big\{1 + 2 \times [-4 \div {\color{orange}{\bf2}} + 7]\big\} \\<br />= & 3 + 2 \times \big\{1 + 2 \times [{\color{orange}{\bf{-2}}} + 7]\big\} \\<br />= & 3 + 2 \times \big\{1 + 2 \times {\color{orange}{\bf5}}\big\} \\<br />= & 3 + 2 \times \big\{1 + {\color{orange}{\bf10}}\big\} \\<br />= & 3 + 2 \times {\color{orange}{\bf11}} \\<br />= & 3 + {\color{orange}{\bf22}} \\<br />= & {\color{orange}{\bf25}}<br />\end{array}
头像 牛客543622112号
发表于 2021-10-04 22:01:17
s = input() s = s.replace("{", "(") s = s.replace("}", ")") s = s.replace("[", "(") s = s.replace("]", ")") print(int(eval(s)))
头像 牛客398248201号
发表于 2021-10-04 20:12:29
import java.util.*; import javax.script.*; public class Main{ public static void main(String[] args) throws ScriptException { Scanner sca 展开全文
头像 迪士尼在逃米老鼠
发表于 2020-02-16 23:53:06
问题:如何判断'+'或'-'是加减还是正负?解答:用一个变量来判断:数字和运算符是交替出现的(括号的出现不会影响这种交替关系)。 思路 用两个栈分别压数字和运算符; 如果当前运算符优先级('*/')高于栈顶运算符('+-')优先级,则将运算符入栈;反之,从数字栈中弹出两个数,从运算符栈中弹出栈顶运 展开全文
头像 摸鱼学大师
发表于 2021-10-26 11:02:19
题目的主要信息: 输入一个表达式(用字符串表示),求这个表达式的值 字符串中有0-9的数字,加减乘除符号,大中小三种括号 表达式一定合法,不用判断括号是否合法之类的问题 除数用整数运算 方法一:递归 具体做法: 括号中的运算式可以看成运算式的子问题,因此可以用递归解决。 第一次运算是运算字符串的 展开全文
头像 代码界的小白
发表于 2021-12-08 23:58:08
题目主要信息 1、给定一个表达式求值 2、字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’ 3、字符串一定合法 4、可能出现多个数字连在一起组成多位数 5、可能出现负数 方法一:利用栈求解 具体方法 我们可以把加减乘除 展开全文
头像 李寻欢大弟子
发表于 2020-11-17 16:25:20
大佬的递归解法,也可以称为消消乐解法,这是我见过最简洁的表达式求值代码。看到这种解法之后我都不想去看什么逆波兰了。。。首先声明,我只是个搬运工。 第一步,先考虑无括号的情况,先乘除后加减,这个用栈很容易解决,遇到数字先压栈,如果下一个是乘号或除号,先出栈,和下一个数进行乘除运算,再入栈,最后就能保证 展开全文
头像 码工在南京
发表于 2022-02-07 11:45:39
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); String s=sc.next 展开全文
头像 牛客155969019号
发表于 2021-10-16 23:23:41
while True: try: s=input() s=s.replace('{', '(') s=s.replace("}",")") s=s.replace("[","(") s=s.replace("]" 展开全文
头像 法拉利201903231900848
发表于 2019-08-18 14:54:47
while True:     try:         s=input()        &nbs 展开全文
头像 strawberryz
发表于 2021-04-25 20:18:53
题目描述 > 输入一个表达式(用字符串表示),求这个表达式的值。 保证字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。且表达式一定合法。 思路参考:https://leetcode-cn.com/problem 展开全文