計算算數表達式算法

思路:javascript

對於任意表達式    5*5+5-5/5html

1.先在表達式前加上  0+ 即:java

0+5*5+5-5/5 並不影響表達式計算結果spa

2. 假設表達式能夠 轉換成 left +/-  right   ,其中的+/- 用sign表示,取值1和-1htm

3. 初始化blog

  第一個: 0+5ip

  left = 0,get

    right = num[0]  第一個操做數,it

    sign = +1 (第一個right的符號)io

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.驗證

相關文章
相關標籤/搜索