华为机试题--计算一个表达式的值
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;
}
}
输入是一个表达式,比如说是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;
}
}
相关文章推荐
- 2014华为机试题---表达式计算
- 【C编程练习】2013华为校园招聘机试题9月10日题2:计算整数二进制表达式中0的个数 最左边1前面的0不考虑 void GenZeroNum(int nVal, int& nZeroNum);
- 华为机试:计算一个表达式的值
- 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。 例如: 输入:3+8×2/9-2 输出:2
- 华为机试题:判断一个点是否在三角形内(java)
- 华为机试题-判断一个数字中是否包含两个相同的子串
- 我就给一个PHP逆波兰表达式的算法吧---工资计算专用
- 从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:逆波兰表达式的长度不超过一行,以$符作为输入结束,操作数之间用空格分隔,操作符只可能有+、-、*、/四种运算。例如:234 34+2*$。
- 计算一个表达式的值
- 华为计算字符个数写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
- 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
- 华为机试题---判断一个字符串中的"( )"是否配对
- 计算一个表达式的值
- 计算一个算数表达式的值
- 华为某年的一个机考题:计算最后一个出列者的编号
- 华为笔试机试题,如何判断一个IP地址是否合法?
- 华为2013校园招聘上机笔试题-计算整数二进制表达式中0的个数
- C语言表达式计算顺序的一个小问题
- 我就给一个PHP逆波兰表达式的算法吧---工资计算专用
- 我就给一个PHP逆波兰表达式的算法吧---工资计算专用