九度OJ 1019

看到这道题网上给的解答都比较繁琐,想了个想到一个简便方法。

 

首先定义一个数组栈stack[],然后扫描算术表达式,遇到“+”则将“+”后面的数压栈,遇到“-”则将“-”后面的数乘以“-1.0”后入栈。

遇到“*”或者“/”后,将“*”“/”前后的数做乘除运算后覆盖压栈(覆盖乘除号前入栈的那个数)。

最后将整个栈中的数相加即为最终结果。java代码如下:

 

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);
 }
}

 

你可能感兴趣的:(九度OJ 1019)