九度OJ 1019

看到這道題網上給的解答都比較繁瑣,想了個想到一個簡便方法。java

 

首先定義一個數組棧stack[],而後掃描算術表達式,遇到「+」則將「+」後面的數壓棧,遇到「-」則將「-」後面的數乘以「-1.0」後入棧。數組

遇到「*」或者「/」後,將「*」「/」先後的數作乘除運算後覆蓋壓棧(覆蓋乘除號前入棧的那個數)。spa

最後將整個棧中的數相加即爲最終結果。java代碼以下:code

 

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/** 
 * @author: pricker
 * 
 */
public class item1019 {
 /**
  * @param args
  */
 
 
 
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  Scanner scan = new Scanner(System.in);
  String input;
  List<String> result = new ArrayList<String>();
  
  while(!(input = scan.nextLine()).equals("0")){
   
   result.add(caculate(input));
   
  }
  for(int i=0;i<result.size();i++){
   System.out.println(result.get(i));
  }
 }
 
 public static String caculate(String input){
  
  String[] inputArray = input.split(" ");
  int len = 1001;
  double[] stack = new double[len];
  int tail = 0;
  stack[0] = Double.valueOf(inputArray[0]);
  
  for(int i=1;i<inputArray.length;i++){     
   if(inputArray[i].equals("+")){
    stack[++tail] = Double.valueOf(inputArray[++i]);
   }else if(inputArray[i].equals("-")){
    stack[++tail] = -1.0*Double.valueOf(inputArray[++i]);
   }else if(inputArray[i].equals("*")){
    
    stack[tail] = stack[tail]*Double.valueOf(inputArray[++i]);
   }else if(inputArray[i].equals("/")){
    stack[tail] = stack[tail]/Double.valueOf(inputArray[++i]);
   }   
  }
  
  double result = 0.0;
  for(int i=0;i<=tail;i++){
   result += stack[i];
  }
  DecimalFormat df = new DecimalFormat("0.00");
  return df.format(result);
 }
}
相關文章
相關標籤/搜索