1 条题解

  • 0
    @ 2026-4-6 9:41:02

    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
    上传者