zoukankan      html  css  js  c++  java
  • 逆波兰表达式

    2:逆波兰表达式

    总时间限制:
    1000ms
    内存限制:
    65536kB
    描述
    逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。
    输入
    输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。
    输出
    输出为一行,表达式的值。
    可直接用printf("%f ", v)输出表达式的值v。
    样例输入
    * + 11.0 12.0 + 24.0 35.0
    样例输出
    1357.000000
    提示
    可使用atof(str)把字符串转换为一个double类型的浮点数。atof定义在math.h中。
    此题可使用函数递归调用的方法求解。
    此题有错:应该是波兰表达式。还有输出保留6位小数。
    本人代码:
    import java.util.Scanner;
    import java.util.Stack;
    public class Main {
      public static void main(String[]args) {
          Scanner sc=new Scanner(System.in);
          String []news=sc.nextLine().split(" ");
          Stack<Double>stack=new Stack<Double>();
          for(int i=news.length-1;i>=0;i--)
          {
                if(news[i].equals("+")) {
                      stack.push((stack.pop()+stack.pop()));
                  } else if(news[i].equals("-")) {
                      stack.push((stack.pop()-stack.pop()));
                  }else if(news[i].equals("*")) {
                      stack.push((stack.pop()*stack.pop()));
                  }else if(news[i].equals("/")) {
                      stack.push((stack.pop()/stack.pop()));
                  }else {
                        
                          try {
                            stack.push(Double.parseDouble(news[i]));
                        } catch (NumberFormatException e) {
                            // TODO 自动生成的 catch 块
                            continue;
                        }
            
            }
              
          }
            System.out.printf("%.6f
    ",stack.peek());
    
        }
     }
    View Code

    感谢董卫老师的帮助,找出我的bug。注意输出格式。老师代码:

    import java.util.Scanner;
    import java.util.Stack;
    
    public class Main {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		
    		Scanner sc = new Scanner(System.in);
    		String[] ss=sc.nextLine().split(" ");
    		Stack<Double> st=new Stack<Double>();
    		for(int i=ss.length-1;i>=0;i--){
    			try{
    			  double d=Double.parseDouble(ss[i]);
    			  st.push(d);
    			}catch(Exception e){
    			   if("+".equals(ss[i])){
    				   st.push(st.pop()+st.pop());
    			   }else if("-".equals(ss[i])){
    				   st.push(st.pop()-st.pop());
    			   }else if("*".equals(ss[i])){
    				   st.push(st.pop()*st.pop());
    			   }else{
    				   st.push(st.pop()/st.pop());
    			   }
    			}			
    			
    		}
    		System.out.printf("%.6f
    ", st.peek());
    
    	}
    
    }
    
  • 相关阅读:
    2020.08.02 周作业简要题解
    Codeforces Round #659【部分题解】
    2020.07.25 周作业简要题解
    我遇到的前端面试题总结(2018)
    React懒加载组件实现
    关于前端中遇到各种高度宽度的总结
    React+Redux项目实战总结
    Redux学习总结
    css学习笔记
    JS学习笔记
  • 原文地址:https://www.cnblogs.com/dean-SunPeishuai/p/10583168.html
Copyright © 2011-2022 走看看