题目1019:简单计算器(堆栈使用,未AC T T)

来源:互联网 发布:javascript 模板 编辑:程序博客网 时间:2024/05/07 14:05
题目1019:简单计算器

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:4364

解决:1627

题目描述:
    读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
输入:
    测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
输出:
    对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
样例输入:
1 + 24 + 2 * 5 - 7 / 110
样例输出:
3.0013.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****************************************************************/


0 0
原创粉丝点击