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 设计模式 富有表现力的Javascript(一)
May 26 Javascript
JavaScript中“基本类型”之争小结
Jan 03 Javascript
javascript 使用 NodeList需要注意的问题
Mar 04 Javascript
jquery模拟LCD 时钟的html文件源代码
Jun 16 Javascript
基于javascript实现按圆形排列DIV元素(一)
Dec 02 Javascript
vue获取DOM元素并设置属性的两种实现方法
Sep 30 Javascript
vue实现登录后页面跳转到之前页面
Jan 07 Javascript
layui select获取自定义属性方法
Aug 15 Javascript
深入理解JavaScript的值传递和引用传递
Oct 24 Javascript
JS使用数组实现的队列功能示例
Mar 04 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
Jun 24 Javascript
Vue通过provide inject实现组件通信
Sep 03 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中设置多级目录session的问题
2011/08/08 PHP
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
ie 调试javascript的工具
2009/04/29 Javascript
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
简单理解vue中Props属性
2016/10/27 Javascript
学习vue.js计算属性
2016/12/03 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
Python学习之Django的管理界面代码示例
2018/02/10 Python
python数据封装json格式数据
2018/03/04 Python
python pandas dataframe 行列选择,切片操作方法
2018/04/10 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
Python代码执行时间测量模块timeit用法解析
2020/07/01 Python
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
说出数据连接池的工作机制是什么?
2013/04/19 面试题
Java程序员面试题
2016/09/27 面试题
学校卫生检查制度
2014/02/03 职场文书
安全教育实施方案
2014/03/02 职场文书
三关爱志愿服务活动方案
2014/08/17 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
二十年同学聚会致辞
2015/07/28 职场文书
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python
教你怎么用Python实现GIF动图的提取及合成
2021/06/15 Python