题目1019:简单计算器
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:4364
解决:1627
-
题目描述:
-
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
-
输入:
-
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
-
输出:
-
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
-
样例输入:
-
1 + 2 4 + 2 * 5 - 7 / 11 0
-
样例输出:
-
3.00 13.36
各种测试用例都完美通过,但是!却不能AC,求大神解救,感激不尽。
import java.util.Scanner; import java.util.Stack; public class Main{ /** * @param args */ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while( scanner.hasNext() ){ String str = scanner.nextLine(); if(str.equals("0")){ break; } String exprisson = str + " " + "="; String analysis[] = exprisson.split(" "); Stack<Double> numStack = new Stack<Double>(); Stack<String> opStack = new Stack<String>(); if(analysis.length <= 3){ System.out.println(String.format("%.2f",Double.valueOf(analysis[0]))); continue; } double result = 0; for (int i = 0; i < analysis.length; i++) { if(defElement(analysis[i]) == 0){ numStack.push(Double.valueOf(analysis[i])); continue; } if(defElement(analysis[i]) == 1){ if(opStack.empty()){ opStack.push(analysis[i]); continue; }else{ while(!opStack.empty()){ result = caculate(numStack.pop(),numStack.pop(),opStack.pop()); numStack.push(result); } } opStack.push(analysis[i]); continue; } if(defElement(analysis[i]) == 2){ opStack.push(analysis[i]); continue; } if(defElement(analysis[i]) == -2){ while(!opStack.empty()){ result = caculate(numStack.pop(),numStack.pop(),opStack.pop()); numStack.push(result); } } } System.out.println(String.format("%.2f",numStack.pop())); } } //计算数值 public static double caculate(Double a, Double b,String op){ if(op.equals("+")){ return a+b; }else if(op.equals("-")){ return b-a; }else if(op.equals("*")){ return a*b; }else if(op.equals("/")){ return b/a; } return 0; } //定义元素,数值返回0,符号+-返回1,符号*/返回2,符号=返回-2 public static int defElement(String element){ int result = -1; char c = element.charAt(0); switch (c) { case '+': result = 1; break; case '-': result = 1; break; case '*': result = 2; break; case '/': result = 2; break; case '=': result = -2; break; default: result = 0; break; } return result; } } /************************************************************** Problem: 1019 User: yihukurama Language: Java Result: Wrong Answer ****************************************************************/