JavaScript 大数据相加的问题


Posted in Javascript onAugust 03, 2011

同样是一道面试题,来自有道前端的面试。
写一个函数处理大数据的相加问题,所谓的大数据是指超出了整型,长整型之类的常规数据类型表示范围的数据。实现语言不限。
我是用js实现的,说一下我自己的思路:
1、首先这个题目最重要的环节在考虑怎么存储大数据?用什么数据类型保存呢?最简单可行的方式是String
2、确定了使用何种类型保存数据之后这个题目就明朗了。首先判断两个传入字符串的长度,取最短的len循环,两者从低位开始对应位相加,同时注意保存进位。在短的数据处理完后,将进位交给较长串的剩余部分处理。
详细实现看一下代码,完整实例见jsfiddle

var strAdd = function(srcA, srcB) { 
var i, temp, tempA, tempB, len, lenA, lenB, carry = 0; 
var res = [], 
arrA = [], 
arrB = [], 
cloneArr = []; 
arrA = srcA.split(''); 
arrB = srcB.split(''); 
arrA.reverse(); 
arrB.reverse(); 
lenA = arrA.length; 
lenB = arrB.length; 
len = lenA > lenB ? lenB : lenA; 
for (i = 0; i < len; i++) { 
tempA = parseInt(arrA[i], 10); 
tempB = parseInt(arrB[i], 10); 
temp = tempA + tempB + carry; 
if (temp > 9) { 
res.push(temp - 10); 
carry = 1; 
} else { 
res.push(temp); 
carry = 0; 
} 
} 
cloneArr = lenA > lenB ? arrA : arrB; 
for (; i < cloneArr.length; i++) { 
tempA = parseInt(cloneArr[i], 10); 
temp = tempA + carry; 
if (temp > 9) { 
res.push(temp - 10); 
carry = 1; 
} else { 
res.push(temp); 
carry = 0; 
} 
} 
return (res.reverse()).join(''); 
};

以上。
PS:其实吧,这个面试题被我改编了下,原始的面试题主考官提示了用字符串保存大数据的,这个其实降低难度了~~
Javascript 相关文章推荐
js 全兼容可高亮二级缓冲折叠菜单
Jun 04 Javascript
解决Jquery鼠标经过不停滑动的问题
Mar 03 Javascript
javascript设置连续两次点击按钮时间间隔的方法
Oct 28 Javascript
node.js中的fs.writeFile方法使用说明
Dec 14 Javascript
DOM节点删除函数removeChild()用法实例
Jan 12 Javascript
AngularJS基础 ng-open 指令简单实例
Aug 02 Javascript
详解vue-validator(vue验证器)
Jan 16 Javascript
JavaScript纯色二维码变成彩色二维码
Jul 23 Javascript
分享Bootstrap简单表格、表单、登录页面
Aug 04 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
Apr 12 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
Apr 24 Javascript
Intellij IDEA搭建vue-cli项目的方法步骤
Oct 20 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
Aug 02 #Javascript
JS 控制小数位数的实现代码
Aug 02 #Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
Aug 02 #Javascript
JQuery+JS实现仿百度搜索结果中关键字变色效果
Aug 02 #Javascript
基于jquery实现漂亮的动态信息提示效果
Aug 02 #Javascript
基于jQuery替换table中的内容并显示进度条的代码
Aug 02 #Javascript
jQuery动态添加的元素绑定事件处理函数代码
Aug 02 #Javascript
You might like
PHP垃圾回收机制简单说明
2010/07/22 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
PHP Web木马扫描器代码分享
2015/09/06 PHP
IE 当eval遇上function的处理
2011/08/09 Javascript
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
jQuery实现文本框邮箱输入自动补全效果
2015/11/17 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
2018/12/17 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
微信小程序 接入腾讯地图的两种写法
2021/01/12 Javascript
Python备份Mysql脚本
2008/08/11 Python
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
Django celery异步任务实现代码示例
2020/11/26 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
使用phonegap克隆和删除联系人的实现方法
2017/03/31 HTML / CSS
ALDO英国官网:加拿大女鞋品牌
2018/02/19 全球购物
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
Java面试题:为什么要用Java
2012/05/11 面试题
大学生专业个人学习的自我评价
2013/10/26 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
酒店端午节促销方案
2014/02/18 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
2015年副班长工作总结
2015/05/15 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS
PyTorch device与cuda.device用法
2022/04/03 Python
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技