idg计算公式?
分析
首先将中缀表达式转换为后缀表达式(逆波兰式),然后使用栈进行计算。
没有考虑括号、小数。
代码
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
public class ExpCal {
public static double calc(String exp) {
if (exp == null || exp.length() <= 0) {
throw new IllegalArgumentException();
}
char[] c = exp.toCharArray();
Stack<Character> s = new Stack<Character>();
List<String> reversePolishNotation = new LinkedList<String>();
for (int i = 0; i < c.length; ++i) {
if (c[i] == '+' || c[i] == '-' || c[i] == '*' || c[i] == '/') {
while (!s.isEmpty() && compOp(s.peek(), c[i]) >= 0) {
reversePolishNotation.add(String.valueOf(s.pop()));
}
s.push(c[i]);
} else {
StringBuilder sb = new StringBuilder();
while (i < c.length && c[i] >= '0' && c[i] <= '9') {
sb.append(c[i++]);
}
reversePolishNotation.add(sb.toString());
--i;
}
}
while (!s.isEmpty()) {
reversePolishNotation.add(String.valueOf(s.pop()));
}
Stack<Double> num = new Stack<Doub
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有