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 相关文章推荐
JavaScript触发器详解
Mar 10 Javascript
jQuery 版元素拖拽原型代码
Apr 25 Javascript
javascript使用数组的push方法完成快速排序
Sep 15 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
Sep 29 Javascript
JS简单实现无缝滚动效果实例
Aug 24 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
Dec 06 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
Mar 02 Javascript
浅析vue给不同环境配置不同打包命令
Aug 17 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
Aug 24 Javascript
使用Angular-CLI构建NPM包的方法
Sep 07 Javascript
js实现GIF动图分解成多帧图片上传
Oct 24 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
Jul 26 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
oracle资料库函式库
2006/10/09 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
浅析javascript中的事件代理
2015/11/06 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
2016/05/18 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
2016/07/13 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
微信小程序 this和that详解及简单实例
2017/02/13 Javascript
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
js实现时钟定时器
2020/03/26 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python版的文曲星猜数字游戏代码
2013/09/02 Python
python实现人脸识别代码
2017/11/08 Python
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
美国购物网站:Clickhere2shop
2021/01/28 全球购物
盛大笔试题
2016/11/05 面试题
UNIX命令速查表
2012/03/10 面试题
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
房产公证书格式
2015/01/26 职场文书
建国大业观后感800字
2015/06/01 职场文书
2016幼儿园毕业感言
2015/12/08 职场文书
2016年清明节红领巾广播稿
2015/12/17 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书