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 相关文章推荐
基于jquery的loading效果实现代码
Nov 05 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
Jul 10 Javascript
JS对文本框值的判断示例
Mar 10 Javascript
jquery 扑捉回车键事件代码
Apr 24 Javascript
node.js中的querystring.unescape方法使用说明
Dec 10 Javascript
JS设置网页图片vspace和hspace属性的方法
Apr 01 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
May 17 Javascript
AngularJS用户选择器指令实例分析
Nov 04 Javascript
Bootstrap CSS使用方法
Dec 23 Javascript
js实现旋转木马效果
Mar 17 Javascript
layer.confirm取消按钮绑定事件的方法
Aug 17 Javascript
vue自动化路由的实现代码
Sep 30 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
推荐文章系统(一)
2006/10/09 PHP
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
JS执行删除前的判断代码
2014/02/18 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
2016/05/26 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
2020/06/23 Javascript
手把手教你如何编译打包video.js
2020/12/09 Javascript
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
Python中获取对象信息的方法
2015/04/27 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
python3.5 cv2 获取视频特定帧生成jpg图片
2019/08/28 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
Linux内核产生并发的原因
2012/07/13 面试题
财务副总经理工作职责
2013/11/25 职场文书
销售辞职报告范文
2014/01/12 职场文书
《分一分》教学反思
2014/04/13 职场文书
土建施工员岗位职责
2014/07/16 职场文书
明星员工获奖感言
2014/08/14 职场文书
给男朋友的道歉短信
2015/05/12 职场文书
小学生暑假生活总结
2015/07/13 职场文书
详解Redis主从复制实践
2021/05/19 Redis
解决Python中的modf()函数取小数部分不准确问题
2021/05/28 Python
vue-cli4.5.x快速搭建项目
2021/05/30 Vue.js
AngularJS实现多级下拉框
2022/03/25 Javascript