js实现四则运算

js实现四则运算
思路:
    把输入的中缀表达式转成后缀表达式,利用正则表达式来处理数字,然后利用栈来得出结果。
代码:

<script>

  var Stack = function(){}
            
            Stack.prototype={
                Init:function(){
                    this.STACKMAX = 100;
                    this.stack = new Array(this.STACKMACK);
                    this.top = -1;
                    return this.stack;
                },
                isEmpty:function(){
                    if(this.top==-1){
                        return true;
                    }
                    else{
                        return false;
                    }
                },
                push:function(elem){
                    if(this.top==this.STACKMAX-1){
                        return "栈满";
                    }
                    else{
                        this.top++;
                        this.stack[this.top] = elem;
                    }
                },
                pop:function(){
                    if(this.top==-1){
                        return "空栈,无法删除栈顶元素!";
                    }
                    else{
                        var x = this.stack[this.top];
                        this.top--;
                        return x;
                    }
                },
                peek:function(){
                    if(this.top!=-1){
                        return this.stack[this.top];
                    }
                    else{
                        return "空栈,顶元素无返回值!";
                    }
                },
                Clear:function(){
                    this.top=-1;
                },
                Length:function(){
                    return this.top+1;
                }
            }

</script>
<script type="text/javascript">



function getBackExpre(s){
	
	var list=new Array();
	var op=new Stack();
	op.Init();
	//var num=str.match(/\d+(\.\d+)?/g);
	var i=0;
	while(i<s.length){
		var c=s.charAt(i);
		if(c>='0'&&c<='9'){
			var s1=s.substr(i);
			var m=s1.match(/\d+(\.\d+)?/g);
			if (m.length>0){
				s1=m[0];
				list.push(s1);
			}
			
			i=i+s1.length;
			continue;
		}else if(c=='('){
			op.push(c);
		}else if(c==')'){
			var p=op.pop();
			while(p!='('){
				list.push(p);
				p=op.pop();
			}
		}else if(c=='+'||c=='-'){
			while(!op.isEmpty()&&(op.peek()=='+'||op.peek()=='-'||op.peek()=='*'||op.peek()=='/')){
				list.push(op.pop());
			}
			op.push(c);
		}else if(c=='*'||c=='/'){
			while(!op.isEmpty()&&(op.peek()=='*'||op.peek()=='/')){
				list.push(op.pop());
			}
			op.push(c);
		}
		i++;
	}

	while(!op.isEmpty()){
		list.push(op.pop());
	}
	
	return list;
	
	
}
function g(a,b,c){
	var v=0;
	a=parseFloat(a);
	b=parseFloat(b);
	
	switch (c)
    {
    case '+':
        v=a+b;
        break;
    case '-':
        v=a-b;
        break;
    case '*':
        v=a*b;
        break;
    case '/':
        v=a/b;
        break;
    }
    return v;
	
}
function getResult(list,result){
	
	for (var i=0;i<list.length;i++){
	
		if(!isNaN(list[i])){
			result.push(list[i]);
			
		}else{
			var b=result.pop();
			var a=result.pop();
			var v=g(a,b,list[i]);
			
			result.push(v);
			
		}
		
	}
	return result.pop();
	
}

</script>
<script>


var str = window.prompt("input",str)  ;
//str 为要输入的四则运算表达式,b为结果
 //var str="1.1+2.0*(3.0+4.0)";
 var list=getBackExpre(str);
 var result=new Stack();
 result.Init();
 var b=getResult(list, result);
 document.write(b);

</script>





测试:








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值