b(a(c(2,3),1,2),c(a(c(3,7),1,2),4))a+,b-,c*,d/b(a(c(2,3),1,2),c(a(c(3,7),1,2),4)) 
= a(c(2,3),1,2) - c(a(c(3,7),1,2),4)
= c(2,3)+1+2 - a(c(3,7),1,2) * 4
= 2*3+1+2 - (c(3,7)+1+2) * 4
= 2*3+1+2 - (3*7+1+2) * 4这样?

解决方案 »

  1.   

    <script>
    function a(){//参数可以任意个
    var len=arguments.length;
    var returnValue=0;
    for(var i=0;i<len;i++){
    returnValue+=arguments[i];
    }
    return returnValue;
    }
    function b(i,j){
    return i-j;
    }
    function c(i,j){
    return i*j;
    }
    function d(i,j){
    return i/j;
    }
    var value=b(a(c(2,3),1,2),c(a(c(3,7),1,2),4));
    alert(value);
    </script>
      

  2.   

    lihui_shine(浪尖赏花) : 我整个表达式是通过别的地方传过来的,把它当一串字符来处理的,如果照你的想法,那我应该怎样才能把"b(a(c(2,3),1,2),c(a(c(3,7),1,2),4))"这个双引号""去掉呢?
      

  3.   

    d(c(b(a('Text1','Text2','Text3'),'Text4'),'Text5','Text6'),'Text7')参数不定的情况下,returnValue+=arguments[i];就会出错,帮忙看下,在线等!!!
      

  4.   

    我一开始就用是arrary的pop(),push()来做的,可这其中涉及到二叉树,JS我怕实现不了,所以才问你们的.
      

  5.   

    d(c(b(a('Text1','Text2','Text3'),'Text4'),'Text5','Text6'),'Text7')参数不定的情况下,returnValue+=arguments[i];就会出错,帮忙看下,在线等!!!
    ----------------------------
    答:a('Text1','Text2','Text3')这个没问题,返回值是'Text1Text2Text3'
    接着是b('Text1Text2Text3','Text4')
    'Text1Text2Text3'-'Text4'这肯定要出错的我整个表达式是通过别的地方传过来的,把它当一串字符来处理的,如果照你的想法,那我应该怎样才能把"b(a(c(2,3),1,2),c(a(c(3,7),1,2),4))"这个双引号""去掉呢?
    ----------------------------
    答:把我程序里的var value=b(a(c(2,3),1,2),c(a(c(3,7),1,2),4));
    改成var str="b(a(c(2,3),1,2),c(a(c(3,7),1,2),4))";
        var value=eval(str);
      

  6.   

    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=gb2312"/>
    <link rel="stylesheet" href=".css"/>
    <title>New Document</title>
    <style type="text/css">
    <!---->
    </style>
    <script type="text/javascript">
    <!--var exp = "b(a(c(2,3),1,2),c(a(c(3,d(28,4)),1,2),4))";function Node(opcode,pNode){
        this.opcode = opcode;
        this.pNode = pNode;
        this.childNodes = [];
    }
    var rn = new Node("a",null);
    var stack = [];
    stack.push(rn);
    function parseExp(s){
        s = s.replace(/\s/g,"");
        while(s.length > 0){
            if(/^(a|b|c|d)/.test(s)){
                var pn = stack.getLast();
                var n = new Node(s.charAt(0),stack.getLast());
                if(pn) pn.childNodes.push(n);
                s = s.substring(RegExp.lastIndex);
            }
            else if(/^\(/.test(s)){
                stack.push(n);
                s = s.substring(1);
            }
            else if(/^\)/.test(s)){
                stack.pop();
                s = s.substring(1);
            }
            else if(/^\d+/.test(s)){
                var pn = stack.getLast();
                var n = new Node(RegExp.lastMatch,pn);
                pn.childNodes.push(n);
                s = s.substring(RegExp.lastIndex);
            }
            else{
                s = s.substring(1);
            }
        }
    }
    function cal(n){
        var code = n.opcode;
        var rslt = 0;
        if(/^\d+$/.test(code)) return parseInt(code,10);
        else{
            switch(code){
                case "a": 
                    for(var i=0,l=n.childNodes.length;i<l;i++)
                        rslt += cal(n.childNodes[i]);
                    break;
                case "b":
                    rslt = cal(n.childNodes[0]);
                    for(var i=1,l=n.childNodes.length;i<l;i++)
                        rslt -= cal(n.childNodes[i]);
                    break;
                case "c":
                    rslt = 1;
                    for(var i=0,l=n.childNodes.length;i<l;i++)
                        rslt *= cal(n.childNodes[i]);
                    break;
                case "d":
                    rslt = cal(n.childNodes[0]);
                    for(var i=1,l=n.childNodes.length;i<l;i++)
                        rslt /= cal(n.childNodes[i]);
                    break;
                default: alert("错啦!code: " + code); break;
            }
        }
        /*
        var str = "opcode : " + n.opcode + "\n";
        for(var i=0;i<n.childNodes.length;i++)
            str += n.childNodes[i].opcode + ",";
        str += "\n" + rslt;
        alert(str);*/
        return rslt;
    }
    Array.prototype.getLast=function(){
        if(this.length == 0) return null;
        return this[this.length-1];
    }function wr(){
        var a = arguments;
        for(var i=0,l=a.length;i<l;i++)
            document.write(a[i]);
    }
    parseExp(exp);
    wr(exp,"<br>")
    wr(cal(rn))
    //-->
    </script>
    <body></body>
    </html>