js 实现个位数的不含括号的 四则运算

// push 尾进 pop 尾出 unshift 头进 shift 头出

// stack 头进头出  尾进尾出

// queue 头进尾出  尾进头出

// 例题 : 设计一位数字 +-*/ 不包含括号的计算器 (parse 计算 规约)
// 目前方法仅支持 正常的输入 '3+5*2/4-9/7*5+1',任何非数字开头,连续操作符都会导致异常
function calc(sToken){
	var arrN = []; // 记录数字的栈
	var arrO = []; // 记录符号的栈
	var sOpr;// 标识符
	for(var i = 0;i <sToken.length;i++){
		var sItem = sToken.charAt(i);
		// 如果是数字 放入栈,是 +- 号 放入另外一个栈,是数字放入数字栈,是 */ 不放入符号栈 ,并记录需要运算 
		// 读下一个数字 ,并去除数字栈的栈尾,对这两个数组进行计算,再 push 到数字栈尾  
		// 再读入下一个 符号 
		 if(sOpr){
			 var previous = arrN.pop();
			 if(sOpr == '*'){
				 arrN.push(previous*sItem);
			 }else{
				 arrN.push(previous/sItem); // 整除不了咋办
			 }
			 sOpr = '';
		 }else{
			 var charCode = sItem.charCodeAt();
			if(charCode >= 0x30 && charCode <= 0x39){
						 arrN.push(sItem);
			}else if(charCode == 43 || charCode == 45){
						 arrO.push(sItem)
			}else if(charCode == '*'.charCodeAt() || charCode == '/'.charCodeAt()){
						 sOpr = sItem;
			}else{
						 console.log('输入的字符被舍弃 : ' + sItem);
			} 
		 }
	}
	var iLenth = arrO.length;
	for	(var j = 0;j < iLenth;j++){
		var b = arrN.shift();
		var o = arrO.shift();
		var a = arrN.shift();
		if(o == '-'){
			arrN.unshift(b-a);
		}else{
			arrN.unshift(b-a+a*2);
		}
	}
	console.log(arrN);
}

发布了3 篇原创文章 · 获赞 0 · 访问量 292
App 阅读领勋章
微信扫码 下载APP
阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览