您的位置:首页 > Web前端 > JavaScript

js实现四则运算

2016-05-05 14:52 537 查看
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>


测试:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: