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

    描述 
    逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,
    也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。 


    输入 

    输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。 


    输出 

    输出为一行,表达式的值。
    可直接用printf("%f ", v)输出表达式的值v。 


    样例输入 

    * + 11.0 12.0 + 24.0 35.0

    样例输出 

    1357.000000


    import java.util.LinkedList;
    import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner input=new Scanner(System.in);
    		LinkedList<String> linklst=new LinkedList<String>();
    	    String s=input.nextLine();
    	    String[] ss=s.split(" ");
    	    for(String to:ss){
    	    	linklst.add(to);
    	    }
    		
    			String a;
    		    double b;
    		    double c;
    		    double d;
    			for(int i=linklst.size()-1;linklst.size()>1;i--)
    			{
    				a=(String)linklst.get(i);
    				//b=Double.parseDouble((String)linklst.get(i+1));
    				//c=Double.parseDouble((String)linklst.get(i+2));
    				if(a.equals("+")){
    					b=Double.parseDouble((String)linklst.get(i+1));
    					c=Double.parseDouble((String)linklst.get(i+2));
    					d=b+c;
    					linklst.add(i, String.valueOf(d));
    					linklst.remove(i+1);
    					linklst.remove(i+1);
    					linklst.remove(i+1);
    					
    				}
    				if(a.equals("-")){
    					b=Double.parseDouble((String)linklst.get(i+1));
    					c=Double.parseDouble((String)linklst.get(i+2));
    					d=Math.abs(b-c);
    					linklst.add(i, String.valueOf(d));
    					linklst.remove(i+1);
    					linklst.remove(i+1);
    					linklst.remove(i+1);
    				}
    				if(a.equals("*")){
    					b=Double.parseDouble((String)linklst.get(i+1));
    					c=Double.parseDouble((String)linklst.get(i+2));
    					d=b*c;
    					linklst.add(i, String.valueOf(d));
    					linklst.remove(i+1);
    					linklst.remove(i+1);
    					linklst.remove(i+1);
    				}
    				if(a.equals("/")){
    					b=Double.parseDouble((String)linklst.get(i+1));
    					c=Double.parseDouble((String)linklst.get(i+2));
    					d=b/c;
    					linklst.add(i, String.valueOf(d));
    					linklst.remove(i+1);
    					linklst.remove(i+1);
    					linklst.remove(i+1);
    				}
    			//	i=linklst.size()-1;
    			}
    		System.out.printf("%.6f",Double.parseDouble(linklst.getLast()));
    		System.out.println();
    	}
    }


  • 相关阅读:
    Winform开发框架之终极应用 伍华聪 博客园
    DZ外部调用登陆
    利用服务定时执行
    winForm写cookie经过
    正则第一天
    NHibernate
    Databases supported by NHibernate
    定时执行
    NHibernate视频教程
    bernate异常及处理方法
  • 原文地址:https://www.cnblogs.com/aukle/p/3231017.html
Copyright © 2011-2022 走看看