【算法结构】一些经典的算法和数据结构的问题

输入是一个表达式,比如说是1*2-3+4*5,要求计算出这个表达式的值。

思路:不瞻前,只顾后。

在计算的时候,如果当前运算符是乘除法,则直接计算出来,再考虑后续的。如果当前的操作符不是乘除,则“顾后”,查看后面的操作符是不是乘除法,如果是乘除法,则计算乘除法,否则把当前的加减法计算出来,再计算后续的。

[java]  view plain copy
  1. package InnerClass;  
  2.   
  3. public class TT {  
  4.     public static void main(String ss[]) {  
  5.         String s = "1+2*3*4+5";  
  6.         System.out.println(calculate(s.toCharArray()));  
  7.     }  
  8.   
  9.     private static double calculate(char[] expr) {  
  10.         double c1 = Double.parseDouble(expr[0] + "");  
  11.         double c2 = Double.parseDouble(expr[2] + "");  
  12.         int index = 3;  
  13.         char op = expr[1];  
  14.         while (index < expr.length) {  
  15.             if (expr[index] == '*' || expr[index] == '/') {  
  16.                 // 如果是乘除法,则先计算  
  17.                 c2 = cal(c2, Double.parseDouble(expr[index + 1] + ""),  
  18.                         expr[index]);  
  19.             } else {  
  20.                 // 如果不是乘除法,则计算出来结果  
  21.                 c1 = cal(c1, c2, op);  
  22.                 op = expr[index];  
  23.                 c2 = Double.parseDouble(expr[index + 1] + "");  
  24.             }  
  25.             index += 2;  
  26.         }  
  27.         return cal(c1, c2, op);  
  28.     }  
  29.   
  30.     private static double cal(double a, double b, char op) {  
  31.         switch (op) {  
  32.         case '+':  
  33.             return a + b;  
  34.         case '-':  
  35.             return a - b;  
  36.         case '*':  
  37.             return a * b;  
  38.         case '/':  
  39.             return a / b;  
  40.         }  
  41.         return -1;  
  42.     }  
  43. }  

你可能感兴趣的:(【算法结构】一些经典的算法和数据结构的问题)