逆波蘭表達式

2:逆波蘭表達式

總時間限制:
1000ms
內存限制:
65536kB
描述
逆波蘭表達式是一種把運算符前置的算術表達式,例如普通的表達式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
提示
可以使用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\n",stack.peek());

    }
 }
View Code

感謝董衛老師的幫助,找出個人bug。注意輸出格式。老師代碼:java

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\n", st.peek());

	}

}
相關文章
相關標籤/搜索