题解 | #表达式求值#

表达式求值

http://www.nowcoder.com/practice/9566499a2e1546c0a257e885dfdbf30d

import java.io.*; public class Main{ public static void main(String[] args) throws Exception { InputStream in = System.in; System.out.println(new ExprDemo().expr(in)); }

public static class ExprDemo {
    public char lastsign1 = 0, lastsign2 = 0;
    public int temp1 = 0, temp2 = 0;
    private static final char tempchar = 0;

    public int expr(InputStream in) throws IOException {
        int result = 0;
        char c;
        a: while((c = (char)in.read()) != '\n') {
            switch (c) {
                case ')': break a;
                case '(': temp2 = new ExprDemo().expr(in); break;
                case '+':
                case '-':
                    jisuan1(tempchar);
                    result = jisuan2(c, result);
                    break;
                case '*':
                case '/':
                    jisuan1(c);
                    break;
                default: temp2 = temp2 * 10 + c - '0'; break;
            }
        }
        jisuan1(tempchar);
        result = jisuan2(tempchar, result);
        return result;
    }

    private void jisuan1(char c) {
        switch (lastsign2) {
            case 0: temp1 = temp2; break;
            case '*': temp1 *= temp2; break;
            case '/': temp1 /= temp2; break;
            default: break;
        }
        temp2 = 0;
        lastsign2 = c;
    }

    private int jisuan2(char c, int result) {
        switch (lastsign1) {
            case 0: result = temp1; break;
            case '-': result -= temp1; break;
            case '+': result += temp1; break;
            default: break;
        }
        temp1 = 0;
        lastsign1 = c;
        return result;
    }
}

}

我居南半坡 文章被收录于专栏

多刷题,积蓄力量,欢迎讨论

全部评论

相关推荐

01-14 16:23
广州商学院 Java
双非后端失败第N人:如果准备好了可以直接投字节,字节是最不看学历的,只要想面,大概率都能给你约面。
双非有机会进大厂吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务