您的位置:首页 > 其它

华为机试题--计算一个表达式的值

2014-03-10 12:31 246 查看
来自于:http://blog.csdn.net/imzoer/article/details/8020343

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

思路:不瞻前,只顾后。

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

[java] view
plaincopy

package InnerClass;



public class TT {

public static void main(String ss[]) {

String s = "1+2*3*4+5";

System.out.println(calculate(s.toCharArray()));

}



private static double calculate(char[] expr) {

double c1 = Double.parseDouble(expr[0] + "");

double c2 = Double.parseDouble(expr[2] + "");

int index = 3;

char op = expr[1];

while (index < expr.length) {

if (expr[index] == '*' || expr[index] == '/') {

// 如果是乘除法,则先计算

c2 = cal(c2, Double.parseDouble(expr[index + 1] + ""),

expr[index]);

} else {

// 如果不是乘除法,则计算出来结果

c1 = cal(c1, c2, op);

op = expr[index];

c2 = Double.parseDouble(expr[index + 1] + "");

}

index += 2;

}

return cal(c1, c2, op);

}



private static double cal(double a, double b, char op) {

switch (op) {

case '+':

return a + b;

case '-':

return a - b;

case '*':

return a * b;

case '/':

return a / b;

}

return -1;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐