L2-053 算式拆解 - java

发布于:2025-05-30 ⋅ 阅读:(25) ⋅ 点赞:(0)

L2-053 算式拆解


语言 时间限制 内存限制 代码长度限制 栈限制
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);
}

Stack
Stack
Stack


如果有说错的 或者 不懂的 尽管提 嘻嘻

一起进步!!!


闪现


网站公告

今日签到

点亮在社区的每一天
去签到