计算算数表达式算法
思路:
对于任意表达式 5*5+5-5/5
1.先在表达式前加上 0+ 即:
0+5*5+5-5/5 并不影响表达式计算结果
2. 假设表达式可以 转换成 left +/- right ,其中的+/- 用sign表示,取值1和-1
3. 初始化
第一个: 0+5
left = 0,
right = num[0] 第一个操作数,
sign = +1 (第一个right的符号)
4. 循环处理:
从第i=0个运算符(*位置)开始判断,
凡是+/- 的,运算
left = left + sign * right ,right = num[i+1] 下一个待运算数
sign = 更新
凡是*/的,运算 right = right */ num[i+1]
5.收尾
计算:left = left + sign * right
打完收工。
代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="out">
</div>
<script type="text/javascript">
function out(msg,addBr) {
var out = document.getElementById("out")
out.innerHTML = out.innerHTML + msg + (addBr?"<br />":"");
}
var num = [5, 5, 5, 5, 5]
var ops = ["+", "-", "*", "/"]
function compute(ans) {
var left = 0
var sign = 1;
var right = num[0]
for(var i = 0; i < 4; i++) {
out(num[i] + ops[ans[i]]);
if(ans[i]<2){
left = left + right*sign;
sign = (ans[i]==1?-1:1);
right = num[i+1]
}else if(ans[i] ==2) {
right = right * num[i+1]
}else if(ans[i] ==3) {
right = right / num[i+1]
}
}
var result = left + sign*right;
out(num[i],false)
out("="+result,true)
}
compute([3,1,0,3])
</script>
</body>
</html>
方法总结 :
1.明确变量(含循环变量)
2.找出规律
3 添加必要辅助状态(初始状态)
4 明确结束状态
5.验证

浙公网安备 33010602011771号