语言 | 时间限制 | 内存限制 | 代码长度限制 | 栈限制 |
---|---|---|---|---|
Java (javac) | 400 ms | 512 MB | 16KB | 8192 KB |
Python (python3) | 400 ms | 256 MB | 16KB | 8192 KB |
其他编译器 | 400 ms | 64 MB | 16KB | 8192 KB |
题目描述:
括号用于改变算式中部分计算的默认优先级,例如 2 + 3 × 4 = 14 2+3×4=14 2+3×4=14,因为乘法优先级高于加法;但 ( 2 + 3 ) × 4 = 20 (2+3)×4=20 (2+3)×4=20,因为括号的存在使得加法先于乘法被执行。本题请你将带括号的算式进行拆解,按执行顺序列出各种操作。
注意:题目只考虑 +
、-
、*
、/
四种操作,且输入保证每个操作及其对应的两个操作对象都被一对圆括号 ()
括住,即算式的通用格式为 (对象 操作 对象)
,其中 对象
可以是数字,也可以是另一个算式。
输入格式:
输入在一行中按题面要求给出带括号的算式,由数字、操作符和圆括号组成。算式内无空格,长度不超过 100 个字符,以回车结束。题目保证给出的算式非空,且是正确可计算的。
输出格式:
按执行顺序列出每一对括号内的操作,每步操作占一行。
注意前面步骤中获得的结果不必输出。例如在样例中,计算了 2+3
以后,下一步应该计算 5*4
,但 5
是前一步的结果,不必输出,所以第二行只输出 *4
即可。
输入样例:
(((2+3)*4)-(5/(6*7)))
输出样例:
2+3
*4
6*7
5/
-
在给定式子其中,将带括号的算式进行拆解,并输出
emmmmmmm
简单的栈应用 —— 《括号匹配问题》
如果当前字符不是 )
时,则将字符存入栈中。
否则遇到 )
时, 则将栈中字符弹出,直到弹出 (
为止。 注:弹出的字符需要倒序显示。
import java.io.*;
public class Main
{
static Stack<Character> st = new Stack<Character>();
static void print()
{
StringBuilder s = new StringBuilder();
// 如果栈顶的元素不是"(",则一直弹出字符
while (st.peek() != '(') s.append(st.pop());
st.pop(); // 弹出最后的 "("
s.reverse(); // 反转字符串
out.println(s);
}
public static void main(String[] args)
{
String S = sc.next();
char s[] = S.toCharArray();
for (int i = 0; i < s.length; i++)
{
if (s[i] == ')') print(); // 如果遇到 ")" , 则将栈中的字符弹出
else st.add(s[i]); // 将元素压入栈中
}
out.flush();
out.close();
}
static Scanner sc = new Scanner(System.in);
static PrintWriter out = new PrintWriter(System.out);
}
如果有说错的 或者 不懂的 尽管提 嘻嘻
一起进步!!!