1 条题解
-
0
import java.util.ArrayDeque; import java.util.Deque; import java.util.Scanner;
public class Main {
public static void main(String[] args) { Scanner sc = new Scanner(System.in); /*后缀表达式 1数字直接输出,后面加 . 2遇到 ( 入栈 3遇到 ) 一直弹到 (,弹出的符号都输出 4遇到 + - * /: 栈里优先级 ≥ 当前的,先弹出输出 再把当前符号入栈 5最后把栈里符号全弹出来输出 */ String s=sc.next(); Deque<Character> deque=new ArrayDeque<>(); StringBuilder sb=new StringBuilder(); for(int i=0;i<s.length();i++) { char c=s.charAt(i); if(c>='0'&&c<='9') { sb.append(c).append('.'); }else if(c=='(') { deque.push(c); }else if(c==')'){ while(deque.peek()!='(') { sb.append(deque.pop()); } deque.pop();//去掉括号 }else {//字符 //栈里优先级 ≥ 当前的,先弹出输出再把当前符号入栈 while(!deque.isEmpty()&& getPriority(deque.peek()) >=getPriority(c)) { sb.append(deque.pop()); } deque.push(c); } } while(!deque.isEmpty()) { sb.append(deque.pop()); } System.out.println(sb); sc.close(); } static int getPriority(char c) {//优先级 if(c=='*'||c=='/') return 2; else if(c=='+'||c=='-')return 1; return 0; }}
信息
- ID
- 134
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 145
- 已通过
- 58
- 上传者