逆波兰表达式 java

Posted on 2013-08-01 19:44  冰天雪域  阅读(381)  评论(0编辑  收藏  举报

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


输入 

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


输出 

输出为一行,表达式的值。
可直接用printf("%f\n", 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();
	}
}


 

 

Copyright © 2024 冰天雪域
Powered by .NET 9.0 on Kubernetes