当前位置: 首页 > news >正文

算法练习--多项式加法

JS 实现 多项式加法


Array.prototype.existKey = function(propVal){
var i = 0;
for(var i = 0;i < this.length; i++){
if(this[i].k == propVal){return i;}
}
return -1;
}

function polynAdd(a,b){
//1. parse out each exp
var strA = a[0] == '-' ? a : '+' + a;
var strB = b[0] == '-' ? b : '+' + b;
var aNb = strA + strB ;
console.log("aNb:"+aNb);

var op = aNb[0];
var s = "";
var arr = new Array();
for(var i = 1;i < aNb.length; i++){
if(i == aNb.length-1){arr.push(op+s+aNb[i]);break;}
if(aNb[i] == '+' || aNb[i]=='-'){
arr.push(op + s);
op = aNb[i];
s="";
}
else{
s+=aNb[i];
}

}

//2. parse out parameter & key for each exp & save into arr
var expArr = new Array();
for(var i = 0;i < arr.length; i++){
var index = arr[i].indexOf('X');
var key = arr[i].substr(index,arr[i].length);
var val = index == 1 ? arr[i][0]+"1" : arr[i].substr(0,index);

var existIndex = expArr.existKey(key);
if(existIndex != -1){
var r = eval(expArr[existIndex].v + val);
expArr[existIndex].v = r>0 ? '+' + r : r;
}
else{
expArr.push({k:key,v:val});
}

}

//3. output result
var resultStr = "";
for(var i = 0;i < expArr.length;i++){
var v = expArr[i].v == "+1" ? '+' : expArr[i].v == "-1" ? '-' : expArr[i].v;
resultStr +=v +expArr[i].k;
}
if(resultStr[0] == '+'){resultStr = resultStr.replace('+','');}

return resultStr;
}

//test
console.log(polynAdd("8X2+3X3-9X5","-4X5+17X2-99X8-15X5"));


相关文章:

  • 高性价比才是王道 三大流行趋势机巅峰对垒
  • mvc 中Range中max和min值晚绑定
  • 网上购物,哪家平台更贴心?——三大网购平台大比拼
  • mvc中使用remote属性来做ajax验证
  • 跨过硬盘瓶颈 体验极速运算——在内存里装系统
  • javascript 获取选中text
  • Windows 7中写字板也能浏览*.docx文档
  • 使用栈结构完成四则运算
  • 是妥协?是阴谋?Office 14为何大打“兼容”牌
  • S60智能手机主流输入法横测
  • 背包算法练习--求小于某数字的数组最大和:
  • 诺基亚7610隐藏分区 以及 诺基亚手机秘籍
  • 使用堆实现Top K 算法 JS 实现
  • 无需上传 不必架设FTP 轻松完成文件共享
  • 快速幂算法 - JS 实现
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • extract-text-webpack-plugin用法
  • js作用域和this的理解
  • PHP的类修饰符与访问修饰符
  • Python连接Oracle
  • React-生命周期杂记
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 基于游标的分页接口实现
  • 技术:超级实用的电脑小技巧
  • 技术胖1-4季视频复习— (看视频笔记)
  • 理清楚Vue的结构
  • 码农张的Bug人生 - 初来乍到
  • 携程小程序初体验
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 关于Android全面屏虚拟导航栏的适配总结
  • 如何用纯 CSS 创作一个货车 loader
  • ​queue --- 一个同步的队列类​
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (二)斐波那契Fabonacci函数
  • (四) Graphivz 颜色选择
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)程序员疫苗:代码注入
  • (转)四层和七层负载均衡的区别
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .Net8 Blazor 尝鲜
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @RestControllerAdvice异常统一处理类失效原因
  • @拔赤:Web前端开发十日谈
  • [Apio2012]dispatching 左偏树